Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Unified Diff: mojo/services/html_viewer/html_document_view.cc

Issue 514063003: Update view_manager and window_manager to make use of content handling. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@viewman2
Patch Set: rebase Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/services/html_viewer/html_document_view.cc
diff --git a/mojo/services/html_viewer/html_document_view.cc b/mojo/services/html_viewer/html_document_view.cc
index 3408c3555eab8f867cf4d3103719904db7e18b63..2757f6f525976e5f8e60efdb34dbd88311e3a0fc 100644
--- a/mojo/services/html_viewer/html_document_view.cc
+++ b/mojo/services/html_viewer/html_document_view.cc
@@ -9,7 +9,10 @@
#include "base/single_thread_task_runner.h"
#include "base/strings/string_util.h"
#include "base/thread_task_runner_handle.h"
+#include "mojo/public/cpp/application/connect.h"
+#include "mojo/public/cpp/application/service_provider_impl.h"
#include "mojo/public/cpp/system/data_pipe.h"
+#include "mojo/public/interfaces/application/shell.mojom.h"
#include "mojo/services/html_viewer/blink_input_events_type_converters.h"
#include "mojo/services/html_viewer/blink_url_request_type_converters.h"
#include "mojo/services/html_viewer/webstoragenamespace_impl.h"
@@ -78,14 +81,21 @@ bool CanNavigateLocally(blink::WebFrame* frame,
} // namespace
-HTMLDocumentView::HTMLDocumentView(ServiceProvider* service_provider,
- ViewManager* view_manager)
- : view_manager_(view_manager),
- navigator_host_(service_provider),
+HTMLDocumentView::HTMLDocumentView(
+ URLResponsePtr response,
+ scoped_ptr<ServiceProvider> imported_services,
+ ServiceProviderImpl* exported_services,
+ Shell* shell)
+ : imported_services_(imported_services.Pass()),
+ shell_(shell),
web_view_(NULL),
root_(NULL),
+ view_manager_client_factory_(shell, this),
repaint_pending_(false),
weak_factory_(this) {
+
+ exported_services->AddService(&view_manager_client_factory_);
+ Load(response.Pass());
}
HTMLDocumentView::~HTMLDocumentView() {
@@ -95,20 +105,24 @@ HTMLDocumentView::~HTMLDocumentView() {
root_->RemoveObserver(this);
}
-void HTMLDocumentView::AttachToView(View* view) {
- root_ = view;
+void HTMLDocumentView::OnEmbed(ViewManager* view_manager,
+ View* root,
+ ServiceProviderImpl* exported_services,
+ scoped_ptr<ServiceProvider> imported_services) {
+ root_ = root;
root_->SetColor(SK_ColorCYAN); // Dummy background color.
-
- web_view_ = blink::WebView::create(this);
- ConfigureSettings(web_view_->settings());
- web_view_->setMainFrame(blink::WebLocalFrame::create(this));
web_view_->resize(root_->bounds().size());
-
root_->AddObserver(this);
}
+void HTMLDocumentView::OnViewManagerDisconnected(ViewManager* view_manager) {
+ // TODO(aa): Need to figure out how shutdown works.
+}
+
void HTMLDocumentView::Load(URLResponsePtr response) {
- DCHECK(web_view_);
+ web_view_ = blink::WebView::create(this);
+ ConfigureSettings(web_view_->settings());
+ web_view_->setMainFrame(blink::WebLocalFrame::create(this));
GURL url(response->url);
@@ -177,7 +191,7 @@ blink::WebNavigationPolicy HTMLDocumentView::decidePolicyForNavigation(
NavigationDetailsPtr nav_details(NavigationDetails::New());
nav_details->request = URLRequest::From(request);
- navigator_host_->RequestNavigate(
+ GetNavigatorHost()->RequestNavigate(
root_->id(),
WebNavigationPolicyToNavigationTarget(default_policy),
nav_details.Pass());
@@ -195,8 +209,8 @@ void HTMLDocumentView::didAddMessageToConsole(
void HTMLDocumentView::didNavigateWithinPage(
blink::WebLocalFrame* frame, const blink::WebHistoryItem& history_item,
blink::WebHistoryCommitType commit_type) {
- navigator_host_->DidNavigateLocally(root_->id(),
- history_item.urlString().utf8());
+ GetNavigatorHost()->DidNavigateLocally(root_->id(),
+ history_item.urlString().utf8());
}
void HTMLDocumentView::OnViewBoundsChanged(View* view,
@@ -222,6 +236,9 @@ void HTMLDocumentView::OnViewInputEvent(View* view, const EventPtr& event) {
void HTMLDocumentView::Repaint() {
repaint_pending_ = false;
+ if (!root_)
+ return;
+
web_view_->animate(0.0);
web_view_->layout();
@@ -236,4 +253,14 @@ void HTMLDocumentView::Repaint() {
root_->SetContents(canvas->getDevice()->accessBitmap(false));
}
+NavigatorHost* HTMLDocumentView::GetNavigatorHost() {
+ if (!navigator_host_.get()) {
+ // TODO(aa): This should come via |imported_services| in OnEmbed().
+ InterfacePtr<ServiceProvider> sp;
+ shell_->ConnectToApplication("mojo:mojo_window_manager", Get(&sp));
+ ConnectToService(sp.get(), &navigator_host_);
+ }
+ return navigator_host_.get();
+}
+
} // namespace mojo

Powered by Google App Engine
This is Rietveld 408576698