diff --git a/ports/jniapi/src/simpleservo.rs b/ports/jniapi/src/simpleservo.rs index 9ad9a10e593..a1cd20bfabd 100644 --- a/ports/jniapi/src/simpleservo.rs +++ b/ports/jniapi/src/simpleservo.rs @@ -30,6 +30,7 @@ use servo::embedder_traits::{ }; use servo::euclid::{Point2D, Rect, Scale, Size2D, Vector2D}; use servo::keyboard_types::{Key, KeyState, KeyboardEvent}; +use servo::net_traits::pub_domains::is_reg_domain; pub use servo::script_traits::{MediaSessionActionType, MouseButton}; use servo::script_traits::{TouchEventType, TouchId, TraversalDirection}; use servo::servo_config::{opts, pref}; @@ -378,10 +379,19 @@ impl ServoGlue { Ok(()) } - /// Load an URL. This needs to be a valid url. - pub fn load_uri(&mut self, url: &str) -> Result<(), &'static str> { - info!("load_uri: {}", url); - ServoUrl::parse(url) + /// Load an URL. If this is not a valid URL, try to "fix" it by adding a scheme or if all else fails, + /// interpret the string as a search term. + pub fn load_uri(&mut self, request: &str) -> Result<(), &'static str> { + info!("load_uri: {}", request); + ServoUrl::parse(request) + .or_else(|_| { + if request.contains('/') || is_reg_domain(request) { + ServoUrl::parse(&format!("https://{}", request)) + } else { + let search_url = pref!(shell.searchpage).replace("%s", request); + ServoUrl::parse(&search_url) + } + }) .map_err(|_| "Can't parse URL") .and_then(|url| { let browser_id = self.get_browser_id()?; 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 ccdfb1dcd9c..13b1985ad51 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 @@ -17,7 +17,6 @@ import android.util.Log; import android.view.View; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; -import android.webkit.URLUtil; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; @@ -79,7 +78,7 @@ public class MainActivity extends Activity implements Servo.Client { mServoView.setServoArgs(args, log); if (Intent.ACTION_VIEW.equals(intent.getAction())) { - mServoView.loadUri(intent.getData()); + mServoView.loadUri(intent.getData().toString()); } setupUrlField(); } @@ -102,8 +101,9 @@ public class MainActivity extends Activity implements Servo.Client { return false; }); mUrlField.setOnFocusChangeListener((v, hasFocus) -> { - if(v.getId() == R.id.urlfield && !hasFocus) { - InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + if (v.getId() == R.id.urlfield && !hasFocus) { + InputMethodManager imm = + (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); assert imm != null; imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } @@ -113,41 +113,33 @@ public class MainActivity extends Activity implements Servo.Client { private void loadUrlFromField() { String text = mUrlField.getText().toString(); text = text.trim(); - String uri; - if (text.contains(" ") || !text.contains(".")) { - uri = URLUtil.composeSearchUrl(text, "https://duckduckgo.com/html/?q=%s", "%s"); - } else { - uri = URLUtil.guessUrl(text); - - if (uri.startsWith("http://") && !text.startsWith("http://")) { - uri = uri.replaceFirst("http://", "https://"); - } - } - - mServoView.loadUri(Uri.parse(uri)); + mServoView.loadUri(text); } // From activity_main.xml: public void onReloadClicked(View v) { mServoView.reload(); } + public void onBackClicked(View v) { mServoView.goBack(); } + public void onForwardClicked(View v) { mServoView.goForward(); } + public void onStopClicked(View v) { mServoView.stop(); } @Override public void onAlert(String message) { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setMessage(message); - AlertDialog alert = builder.create(); - alert.show(); + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setMessage(message); + AlertDialog alert = builder.create(); + alert.show(); } @Override diff --git a/support/android/apk/servoview/src/main/java/org/mozilla/servoview/ServoView.java b/support/android/apk/servoview/src/main/java/org/mozilla/servoview/ServoView.java index 1ab99a43756..b9e6d47e64d 100644 --- a/support/android/apk/servoview/src/main/java/org/mozilla/servoview/ServoView.java +++ b/support/android/apk/servoview/src/main/java/org/mozilla/servoview/ServoView.java @@ -211,11 +211,11 @@ public class ServoView extends SurfaceView mServo.stop(); } - public void loadUri(Uri uri) { + public void loadUri(String uri) { if (mServo != null) { - mServo.loadUri(uri.toString()); + mServo.loadUri(uri); } else { - mInitialUri = uri.toString(); + mInitialUri = uri; } }