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

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

Issue 469803005: Mojo: simple iframe support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 7751aa4e07dc74502b2cf07b10d5b40ee3ae7734..69d66162bd5fc7314dfb97a36814d11a7d2eb29e 100644
--- a/mojo/services/html_viewer/html_document_view.cc
+++ b/mojo/services/html_viewer/html_document_view.cc
@@ -80,11 +80,11 @@ bool CanNavigateLocally(blink::WebFrame* frame,
HTMLDocumentView::HTMLDocumentView(ServiceProvider* service_provider,
ViewManager* view_manager)
- : view_manager_(view_manager),
+ : SimpleFrameClient(service_provider, 0),
+ view_manager_(view_manager),
web_view_(NULL),
root_(NULL),
repaint_pending_(false),
- navigator_host_(service_provider),
weak_factory_(this) {
}
@@ -97,6 +97,7 @@ HTMLDocumentView::~HTMLDocumentView() {
void HTMLDocumentView::AttachToView(View* view) {
root_ = view;
+ root_id_ = root_->id();
root_->SetColor(SK_ColorCYAN); // Dummy background color.
web_view_ = blink::WebView::create(this);
@@ -145,13 +146,60 @@ bool HTMLDocumentView::allowsBrokenNullLayerTreeView() const {
return true;
}
-blink::WebCookieJar* HTMLDocumentView::cookieJar(blink::WebLocalFrame* frame) {
+SimpleFrameClient::SimpleFrameClient(ServiceProvider* service_provider,
+ Id root_id)
+ : service_provider_(service_provider),
+ navigator_host_(service_provider),
+ root_id_(root_id) {
+}
+
+SimpleFrameClient::~SimpleFrameClient() {
+}
+
+blink::WebFrame* SimpleFrameClient::createChildFrame(
+ blink::WebLocalFrame* parent,
+ const blink::WebString& frameName) {
+ // TODO(mpcomplete): What happens if root_ is destroyed and the child frames
+ // live on? Can that happen?
+ blink::WebLocalFrame* web_frame =
+ blink::WebLocalFrame::create(new SimpleFrameClient(service_provider_,
darin (slow to review) 2014/08/14 23:45:52 why do you need a new WebFrameClient instance per
Matt Perry 2014/08/15 00:40:04 Doh. I guess you don't. I assumed WebLocalFrame ex
+ root_id_));
+ parent->appendChild(web_frame);
+
+ return web_frame;
+}
+
+void SimpleFrameClient::didDisownOpener(blink::WebLocalFrame* frame) {
+}
+
+void SimpleFrameClient::frameDetached(blink::WebFrame* frame) {
+ bool is_subframe = !!frame->parent();
+
+ if (is_subframe)
+ frame->parent()->removeChild(frame);
+
+ // |frame| is invalid after here.
+ frame->close();
+
+ if (is_subframe) {
+ delete this;
+ // Object is invalid after this point.
+ }
+}
+
+void SimpleFrameClient::frameFocused() {
+}
+
+void SimpleFrameClient::willClose(blink::WebFrame* frame) {
+}
+
+blink::WebCookieJar* SimpleFrameClient::cookieJar(blink::WebLocalFrame* frame) {
// TODO(darin): Blink does not fallback to the Platform provided WebCookieJar.
// Either it should, as it once did, or we should find another solution here.
return blink::Platform::current()->cookieJar();
}
-blink::WebNavigationPolicy HTMLDocumentView::decidePolicyForNavigation(
+blink::WebNavigationPolicy SimpleFrameClient::decidePolicyForNavigation(
blink::WebLocalFrame* frame, blink::WebDataSource::ExtraData* data,
const blink::WebURLRequest& request, blink::WebNavigationType nav_type,
blink::WebNavigationPolicy default_policy, bool is_redirect) {
@@ -162,24 +210,24 @@ blink::WebNavigationPolicy HTMLDocumentView::decidePolicyForNavigation(
nav_details->request = URLRequest::From(request);
navigator_host_->RequestNavigate(
- root_->id(),
+ root_id_,
WebNavigationPolicyToNavigationTarget(default_policy),
nav_details.Pass());
return blink::WebNavigationPolicyIgnore;
}
-void HTMLDocumentView::didAddMessageToConsole(
+void SimpleFrameClient::didAddMessageToConsole(
const blink::WebConsoleMessage& message,
const blink::WebString& source_name,
unsigned source_line,
const blink::WebString& stack_trace) {
}
-void HTMLDocumentView::didNavigateWithinPage(
+void SimpleFrameClient::didNavigateWithinPage(
blink::WebLocalFrame* frame, const blink::WebHistoryItem& history_item,
blink::WebHistoryCommitType commit_type) {
- navigator_host_->DidNavigateLocally(root_->id(),
+ navigator_host_->DidNavigateLocally(root_id_,
history_item.urlString().utf8());
}
@@ -194,6 +242,7 @@ void HTMLDocumentView::OnViewDestroyed(View* view) {
DCHECK_EQ(view, root_);
view->RemoveObserver(this);
root_ = NULL;
+ root_id_ = 0;
}
void HTMLDocumentView::OnViewInputEvent(View* view, const EventPtr& event) {

Powered by Google App Engine
This is Rietveld 408576698