diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2019-06-28 17:31:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-28 17:31:25 -0400 |
commit | 177b2a6fa9094ce725d50636abe76e8bd557c7dd (patch) | |
tree | 7a3c813572acb3ba040885aa5b2df027cb973a63 | |
parent | f81da9824e81d8e1a97a46a9b8af795c896ca005 (diff) | |
parent | 027514c3e63fe8499f3a2bdcd06419b7ed2719a6 (diff) | |
download | servo-177b2a6fa9094ce725d50636abe76e8bd557c7dd.tar.gz servo-177b2a6fa9094ce725d50636abe76e8bd557c7dd.zip |
Auto merge of #23649 - jdm:marketplace, r=jdm
Add support for market:// urls
Rebased from #23648.
---
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes fix #21992.
- [x] These changes do not require tests because can't test embedders.
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/23649)
<!-- Reviewable:end -->
-rw-r--r-- | ports/libmlservo/src/lib.rs | 3 | ||||
-rw-r--r-- | ports/libsimpleservo/api/src/lib.rs | 10 | ||||
-rw-r--r-- | ports/libsimpleservo/capi/src/lib.rs | 9 | ||||
-rw-r--r-- | ports/libsimpleservo/jniapi/src/lib.rs | 20 | ||||
-rw-r--r-- | support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java | 14 | ||||
-rw-r--r-- | support/android/apk/servoview/src/main/java/org/mozilla/servoview/Servo.java | 6 |
6 files changed, 60 insertions, 2 deletions
diff --git a/ports/libmlservo/src/lib.rs b/ports/libmlservo/src/lib.rs index a9efb4fca34..6ad7b19d9ca 100644 --- a/ports/libmlservo/src/lib.rs +++ b/ports/libmlservo/src/lib.rs @@ -350,6 +350,9 @@ impl HostTrait for HostCallbacks { fn on_load_started(&self) {} fn on_load_ended(&self) {} fn on_title_changed(&self, _title: String) {} + fn on_allow_navigation(&self, _url: String) -> bool { + true + } fn on_url_changed(&self, url: String) { if let Ok(cstr) = CString::new(url.as_str()) { if let Some(url_update) = self.url_update.0 { diff --git a/ports/libsimpleservo/api/src/lib.rs b/ports/libsimpleservo/api/src/lib.rs index ba660d9c173..41d2a937e89 100644 --- a/ports/libsimpleservo/api/src/lib.rs +++ b/ports/libsimpleservo/api/src/lib.rs @@ -97,6 +97,8 @@ pub trait HostTrait { fn on_load_ended(&self); /// Page title has changed. fn on_title_changed(&self, title: String); + /// Allow Navigation. + fn on_allow_navigation(&self, url: String) -> bool; /// Page URL has changed. fn on_url_changed(&self, url: String); /// Back/forward state has changed. @@ -474,9 +476,13 @@ impl ServoGlue { let title = format!("{} - Servo", title); self.callbacks.host_callbacks.on_title_changed(title); }, - EmbedderMsg::AllowNavigationRequest(pipeline_id, _url) => { + EmbedderMsg::AllowNavigationRequest(pipeline_id, url) => { if let Some(_browser_id) = browser_id { - let window_event = WindowEvent::AllowNavigationResponse(pipeline_id, true); + let data: bool = self + .callbacks + .host_callbacks + .on_allow_navigation(url.to_string()); + let window_event = WindowEvent::AllowNavigationResponse(pipeline_id, data); let _ = self.process_event(window_event); } }, diff --git a/ports/libsimpleservo/capi/src/lib.rs b/ports/libsimpleservo/capi/src/lib.rs index 5ac66735567..514b87a7421 100644 --- a/ports/libsimpleservo/capi/src/lib.rs +++ b/ports/libsimpleservo/capi/src/lib.rs @@ -37,6 +37,7 @@ pub struct CHostCallbacks { pub on_load_started: extern "C" fn(), pub on_load_ended: extern "C" fn(), pub on_title_changed: extern "C" fn(title: *const c_char), + pub on_allow_navigation: extern "C" fn(url: *const c_char) -> bool, pub on_url_changed: extern "C" fn(url: *const c_char), pub on_history_changed: extern "C" fn(can_go_back: bool, can_go_forward: bool), pub on_animating_changed: extern "C" fn(animating: bool), @@ -322,6 +323,14 @@ impl HostTrait for HostCallbacks { (self.0.on_title_changed)(title_ptr); } + fn on_allow_navigation(&self, url: String) -> bool { + debug!("on_allow_navigation"); + let url = CString::new(url).expect("Can't create string"); + let url_ptr = url.as_ptr(); + mem::forget(url); + (self.0.on_allow_navigation)(url_ptr) + } + fn on_url_changed(&self, url: String) { debug!("on_url_changed"); let url = CString::new(url).expect("Can't create string"); diff --git a/ports/libsimpleservo/jniapi/src/lib.rs b/ports/libsimpleservo/jniapi/src/lib.rs index f2379a3db0c..a8da503c256 100644 --- a/ports/libsimpleservo/jniapi/src/lib.rs +++ b/ports/libsimpleservo/jniapi/src/lib.rs @@ -411,6 +411,26 @@ impl HostTrait for HostCallbacks { .unwrap(); } + fn on_allow_navigation(&self, url: String) -> bool { + debug!("on_allow_navigation"); + let env = self.jvm.get_env().unwrap(); + let s = match new_string(&env, &url) { + Ok(s) => s, + Err(_) => return false, + }; + let s = JValue::from(JObject::from(s)); + let allow = env.call_method( + self.callbacks.as_obj(), + "onAllowNavigation", + "(Ljava/lang/String;)Z", + &[s], + ); + match allow { + Ok(allow) => return allow.z().unwrap(), + Err(_) => return true, + } + } + fn on_url_changed(&self, url: String) { debug!("on_url_changed"); let env = self.jvm.get_env().unwrap(); diff --git a/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java b/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java index 0a07580cf8f..ffd445ff034 100644 --- a/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java +++ b/support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java @@ -20,6 +20,7 @@ import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; +import android.util.Log; import org.mozilla.servoview.ServoView; import org.mozilla.servoview.Servo; @@ -162,6 +163,19 @@ public class MainActivity extends Activity implements Servo.Client { mCanGoBack = canGoBack; } + @Override + public boolean onAllowNavigation(String url) { + if (url.startsWith("market://")) { + try { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); + return false; + } catch (Exception e) { + Log.e("onAllowNavigation", e.toString()); + } + } + return true; + } + public void onRedrawing(boolean redrawing) { if (redrawing) { mIdleText.setText("LOOP"); diff --git a/support/android/apk/servoview/src/main/java/org/mozilla/servoview/Servo.java b/support/android/apk/servoview/src/main/java/org/mozilla/servoview/Servo.java index 13c177c1236..a5ca75ee8e2 100644 --- a/support/android/apk/servoview/src/main/java/org/mozilla/servoview/Servo.java +++ b/support/android/apk/servoview/src/main/java/org/mozilla/servoview/Servo.java @@ -169,6 +169,8 @@ public class Servo { } public interface Client { + boolean onAllowNavigation(String url); + void onLoadStarted(); void onLoadEnded(); @@ -234,6 +236,10 @@ public class Servo { mRunCallback.inGLThread(() -> mGfxCb.animationStateChanged(animating)); } + public boolean onAllowNavigation(String url) { + return mClient.onAllowNavigation(url); + } + public void onLoadStarted() { mRunCallback.inUIThread(() -> mClient.onLoadStarted()); } |