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

Side by Side Diff: chrome/browser/guestview/webview/webview_guest.cc

Issue 17846010: <webview>: Move contentload event from content to chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@guestview_loadstop
Patch Set: Merge with ToT Created 7 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/guestview/webview/webview_guest.h" 5 #include "chrome/browser/guestview/webview/webview_guest.h"
6 6
7 #include "base/debug/stack_trace.h" 7 #include "base/debug/stack_trace.h"
8 #include "chrome/browser/extensions/api/web_request/web_request_api.h" 8 #include "chrome/browser/extensions/api/web_request/web_request_api.h"
9 #include "chrome/browser/extensions/extension_renderer_state.h" 9 #include "chrome/browser/extensions/extension_renderer_state.h"
10 #include "chrome/browser/extensions/script_executor.h" 10 #include "chrome/browser/extensions/script_executor.h"
11 #include "chrome/browser/guestview/guestview_constants.h" 11 #include "chrome/browser/guestview/guestview_constants.h"
12 #include "chrome/browser/guestview/webview/webview_constants.h" 12 #include "chrome/browser/guestview/webview/webview_constants.h"
13 #include "content/public/browser/browser_thread.h" 13 #include "content/public/browser/browser_thread.h"
14 #include "content/public/browser/notification_source.h"
15 #include "content/public/browser/notification_types.h"
14 #include "content/public/browser/render_process_host.h" 16 #include "content/public/browser/render_process_host.h"
15 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_contents.h"
16 18
17 using content::WebContents; 19 using content::WebContents;
18 20
19 namespace { 21 namespace {
20 22
21 void RemoveWebViewEventListenersOnIOThread( 23 void RemoveWebViewEventListenersOnIOThread(
22 void* profile, 24 void* profile,
23 const std::string& extension_id, 25 const std::string& extension_id,
24 int embedder_process_id, 26 int embedder_process_id,
25 int guest_instance_id) { 27 int guest_instance_id) {
26 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 28 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
27 ExtensionWebRequestEventRouter::GetInstance()->RemoveWebViewEventListeners( 29 ExtensionWebRequestEventRouter::GetInstance()->RemoveWebViewEventListeners(
28 profile, extension_id, embedder_process_id, guest_instance_id); 30 profile, extension_id, embedder_process_id, guest_instance_id);
29 } 31 }
30 32
31 } // namespace 33 } // namespace
32 34
33 WebViewGuest::WebViewGuest(WebContents* guest_web_contents) 35 WebViewGuest::WebViewGuest(WebContents* guest_web_contents)
34 : GuestView(guest_web_contents), 36 : GuestView(guest_web_contents),
35 WebContentsObserver(guest_web_contents), 37 WebContentsObserver(guest_web_contents),
36 script_executor_(new extensions::ScriptExecutor(guest_web_contents, 38 script_executor_(new extensions::ScriptExecutor(guest_web_contents,
37 &script_observers_)) { 39 &script_observers_)) {
40 notification_registrar_.Add(
41 this, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
42 content::Source<WebContents>(guest_web_contents));
38 } 43 }
39 44
40 // static 45 // static
41 WebViewGuest* WebViewGuest::From(int embedder_process_id, 46 WebViewGuest* WebViewGuest::From(int embedder_process_id,
42 int guest_instance_id) { 47 int guest_instance_id) {
43 GuestView* guest = GuestView::From(embedder_process_id, guest_instance_id); 48 GuestView* guest = GuestView::From(embedder_process_id, guest_instance_id);
44 if (!guest) 49 if (!guest)
45 return NULL; 50 return NULL;
46 return guest->AsWebView(); 51 return guest->AsWebView();
47 } 52 }
(...skipping 13 matching lines...) Expand all
61 } 66 }
62 67
63 WebViewGuest* WebViewGuest::AsWebView() { 68 WebViewGuest* WebViewGuest::AsWebView() {
64 return this; 69 return this;
65 } 70 }
66 71
67 AdViewGuest* WebViewGuest::AsAdView() { 72 AdViewGuest* WebViewGuest::AsAdView() {
68 return NULL; 73 return NULL;
69 } 74 }
70 75
76 void WebViewGuest::Observe(int type,
77 const content::NotificationSource& source,
78 const content::NotificationDetails& details) {
79 switch (type) {
80 case content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME: {
81 DCHECK_EQ(content::Source<WebContents>(source).ptr(),
82 guest_web_contents());
83 if (content::Source<WebContents>(source).ptr() == guest_web_contents())
84 LoadHandlerCalled();
85 break;
86 }
87 default:
88 NOTREACHED() << "Unexpected notification sent.";
89 break;
90 }
91 }
92
71 void WebViewGuest::Go(int relative_index) { 93 void WebViewGuest::Go(int relative_index) {
72 guest_web_contents()->GetController().GoToOffset(relative_index); 94 guest_web_contents()->GetController().GoToOffset(relative_index);
73 } 95 }
74 96
75 WebViewGuest::~WebViewGuest() { 97 WebViewGuest::~WebViewGuest() {
76 } 98 }
77 99
78 void WebViewGuest::DidCommitProvisionalLoadForFrame( 100 void WebViewGuest::DidCommitProvisionalLoadForFrame(
79 int64 frame_id, 101 int64 frame_id,
80 bool is_main_frame, 102 bool is_main_frame,
(...skipping 21 matching lines...) Expand all
102 content::BrowserThread::IO, 124 content::BrowserThread::IO,
103 FROM_HERE, 125 FROM_HERE,
104 base::Bind( 126 base::Bind(
105 &RemoveWebViewEventListenersOnIOThread, 127 &RemoveWebViewEventListenersOnIOThread,
106 browser_context(), extension_id(), 128 browser_context(), extension_id(),
107 embedder_render_process_id(), 129 embedder_render_process_id(),
108 view_instance_id())); 130 view_instance_id()));
109 delete this; 131 delete this;
110 } 132 }
111 133
134 void WebViewGuest::LoadHandlerCalled() {
135 scoped_ptr<DictionaryValue> args(new DictionaryValue());
136 DispatchEvent(new GuestView::Event(webview::kEventContentLoad, args.Pass()));
137 }
138
112 void WebViewGuest::AddWebViewToExtensionRendererState() { 139 void WebViewGuest::AddWebViewToExtensionRendererState() {
113 ExtensionRendererState::WebViewInfo webview_info; 140 ExtensionRendererState::WebViewInfo webview_info;
114 webview_info.embedder_process_id = embedder_render_process_id(); 141 webview_info.embedder_process_id = embedder_render_process_id();
115 webview_info.embedder_routing_id = embedder_web_contents()->GetRoutingID(); 142 webview_info.embedder_routing_id = embedder_web_contents()->GetRoutingID();
116 webview_info.guest_instance_id = guest_instance_id(); 143 webview_info.guest_instance_id = guest_instance_id();
117 webview_info.instance_id = view_instance_id(); 144 webview_info.instance_id = view_instance_id();
118 145
119 content::BrowserThread::PostTask( 146 content::BrowserThread::PostTask(
120 content::BrowserThread::IO, FROM_HERE, 147 content::BrowserThread::IO, FROM_HERE,
121 base::Bind( 148 base::Bind(
122 &ExtensionRendererState::AddWebView, 149 &ExtensionRendererState::AddWebView,
123 base::Unretained(ExtensionRendererState::GetInstance()), 150 base::Unretained(ExtensionRendererState::GetInstance()),
124 guest_web_contents()->GetRenderProcessHost()->GetID(), 151 guest_web_contents()->GetRenderProcessHost()->GetID(),
125 guest_web_contents()->GetRoutingID(), 152 guest_web_contents()->GetRoutingID(),
126 webview_info)); 153 webview_info));
127 } 154 }
128 155
129 // static 156 // static
130 void WebViewGuest::RemoveWebViewFromExtensionRendererState( 157 void WebViewGuest::RemoveWebViewFromExtensionRendererState(
131 WebContents* web_contents) { 158 WebContents* web_contents) {
132 content::BrowserThread::PostTask( 159 content::BrowserThread::PostTask(
133 content::BrowserThread::IO, FROM_HERE, 160 content::BrowserThread::IO, FROM_HERE,
134 base::Bind( 161 base::Bind(
135 &ExtensionRendererState::RemoveWebView, 162 &ExtensionRendererState::RemoveWebView,
136 base::Unretained(ExtensionRendererState::GetInstance()), 163 base::Unretained(ExtensionRendererState::GetInstance()),
137 web_contents->GetRenderProcessHost()->GetID(), 164 web_contents->GetRenderProcessHost()->GetID(),
138 web_contents->GetRoutingID())); 165 web_contents->GetRoutingID()));
139 } 166 }
OLDNEW
« no previous file with comments | « chrome/browser/guestview/webview/webview_guest.h ('k') | chrome/renderer/resources/extensions/web_view.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698