Index: mandoline/ui/browser/browser.cc |
diff --git a/mandoline/ui/browser/browser.cc b/mandoline/ui/browser/browser.cc |
index 52741a803c6751450b0747b6e156e51af2097831..688d326faf8834ee337f2374a02f8571139ccf0c 100644 |
--- a/mandoline/ui/browser/browser.cc |
+++ b/mandoline/ui/browser/browser.cc |
@@ -9,6 +9,7 @@ |
#include "mandoline/ui/browser/browser_ui.h" |
#include "mandoline/ui/browser/merged_service_provider.h" |
#include "mojo/application/application_runner_chromium.h" |
+#include "mojo/common/common_type_converters.h" |
#include "third_party/mojo/src/mojo/public/c/system/main.h" |
#include "ui/gfx/geometry/size.h" |
@@ -18,6 +19,7 @@ Browser::Browser() |
: window_manager_app_(new window_manager::WindowManagerApp(this, this)), |
root_(nullptr), |
content_(nullptr), |
+ omnibox_(nullptr), |
navigator_host_(this), |
ui_(nullptr), |
weak_factory_(this) { |
@@ -31,14 +33,13 @@ base::WeakPtr<Browser> Browser::GetWeakPtr() { |
return weak_factory_.GetWeakPtr(); |
} |
-// Convenience method: |
void Browser::ReplaceContentWithURL(const mojo::String& url) { |
Embed(url, nullptr, nullptr); |
} |
void Browser::Initialize(mojo::ApplicationImpl* app) { |
window_manager_app_->Initialize(app); |
- ui_.reset(BrowserUI::Create(this, app->shell())); |
+ ui_.reset(BrowserUI::Create(this, app)); |
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
base::CommandLine::StringVector args = command_line->GetArgs(); |
@@ -77,7 +78,7 @@ void Browser::OnEmbed( |
// the UI class. |
root_ = root; |
content_ = root->view_manager()->CreateView(); |
- ui_->Init(root_, content_); |
+ ui_->Init(root_); |
#if defined(OS_ANDROID) |
// Resize to match the Nexus 5 aspect ratio: |
@@ -108,6 +109,11 @@ void Browser::OnViewManagerDisconnected( |
void Browser::Embed(const mojo::String& url, |
mojo::InterfaceRequest<mojo::ServiceProvider> services, |
mojo::ServiceProviderPtr exposed_services) { |
+ if (url == "mojo:omnibox") { |
+ ShowOmnibox(url, services.Pass(), exposed_services.Pass()); |
+ return; |
+ } |
+ |
// We can get Embed calls before we've actually been |
// embedded into the root view and content_ is created. |
// Just save the last url, we'll embed it when we're ready. |
@@ -116,6 +122,12 @@ void Browser::Embed(const mojo::String& url, |
return; |
} |
+ GURL gurl(url.To<base::string16>()); |
+ bool changed = current_url_ != gurl; |
+ current_url_ = gurl; |
+ if (changed) |
+ ui_->OnURLChanged(); |
+ |
merged_service_provider_.reset( |
new MergedServiceProvider(exposed_services.Pass(), this)); |
content_->Embed(url, services.Pass(), |
@@ -131,9 +143,27 @@ void Browser::OnAcceleratorPressed(mojo::View* view, |
navigator_host_.RequestNavigateHistory(-1); |
} |
+void Browser::OpenURL(const mojo::String& url) { |
+ omnibox_->SetVisible(false); |
+ ReplaceContentWithURL(url); |
+} |
+ |
void Browser::Create(mojo::ApplicationConnection* connection, |
mojo::InterfaceRequest<mojo::NavigatorHost> request) { |
navigator_host_.Bind(request.Pass()); |
} |
+void Browser::ShowOmnibox( |
+ const mojo::String& url, |
+ mojo::InterfaceRequest<mojo::ServiceProvider> services, |
+ mojo::ServiceProviderPtr exposed_services) { |
+ if (!omnibox_) { |
+ omnibox_ = root_->view_manager()->CreateView(); |
+ root_->AddChild(omnibox_); |
+ omnibox_->SetVisible(true); |
+ omnibox_->SetBounds(root_->bounds()); |
+ } |
+ omnibox_->Embed(url, services.Pass(), exposed_services.Pass()); |
+} |
+ |
} // namespace mandoline |