aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2019-06-28 17:31:25 -0400
committerGitHub <noreply@github.com>2019-06-28 17:31:25 -0400
commit177b2a6fa9094ce725d50636abe76e8bd557c7dd (patch)
tree7a3c813572acb3ba040885aa5b2df027cb973a63
parentf81da9824e81d8e1a97a46a9b8af795c896ca005 (diff)
parent027514c3e63fe8499f3a2bdcd06419b7ed2719a6 (diff)
downloadservo-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.rs3
-rw-r--r--ports/libsimpleservo/api/src/lib.rs10
-rw-r--r--ports/libsimpleservo/capi/src/lib.rs9
-rw-r--r--ports/libsimpleservo/jniapi/src/lib.rs20
-rw-r--r--support/android/apk/servoapp/src/main/java/org/mozilla/servo/MainActivity.java14
-rw-r--r--support/android/apk/servoview/src/main/java/org/mozilla/servoview/Servo.java6
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());
}