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

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 LoadHandlerCalled();
lazyboy 2013/06/28 18:55:08 if (source == guest_web_contents()) { LoadHandle
Fady Samuel 2013/06/28 21:24:35 Done.
84 break;
85 }
86 default:
87 NOTREACHED() << "Unexpected notification sent.";
88 break;
89 }
90 }
91
71 void WebViewGuest::Go(int relative_index) { 92 void WebViewGuest::Go(int relative_index) {
72 guest_web_contents()->GetController().GoToOffset(relative_index); 93 guest_web_contents()->GetController().GoToOffset(relative_index);
73 } 94 }
74 95
75 WebViewGuest::~WebViewGuest() { 96 WebViewGuest::~WebViewGuest() {
76 } 97 }
77 98
78 void WebViewGuest::DidCommitProvisionalLoadForFrame( 99 void WebViewGuest::DidCommitProvisionalLoadForFrame(
79 int64 frame_id, 100 int64 frame_id,
80 bool is_main_frame, 101 bool is_main_frame,
(...skipping 21 matching lines...) Expand all
102 content::BrowserThread::IO, 123 content::BrowserThread::IO,
103 FROM_HERE, 124 FROM_HERE,
104 base::Bind( 125 base::Bind(
105 &RemoveWebViewEventListenersOnIOThread, 126 &RemoveWebViewEventListenersOnIOThread,
106 browser_context(), extension_id(), 127 browser_context(), extension_id(),
107 embedder_render_process_id(), 128 embedder_render_process_id(),
108 view_instance_id())); 129 view_instance_id()));
109 delete this; 130 delete this;
110 } 131 }
111 132
133 void WebViewGuest::LoadHandlerCalled() {
134 scoped_ptr<DictionaryValue> args(new DictionaryValue());
135 DispatchEvent(new GuestView::Event(webview::kEventContentLoad, args.Pass()));
136 }
137
112 void WebViewGuest::AddWebViewToExtensionRendererState() { 138 void WebViewGuest::AddWebViewToExtensionRendererState() {
113 ExtensionRendererState::WebViewInfo webview_info; 139 ExtensionRendererState::WebViewInfo webview_info;
114 webview_info.embedder_process_id = embedder_render_process_id(); 140 webview_info.embedder_process_id = embedder_render_process_id();
115 webview_info.embedder_routing_id = embedder_web_contents()->GetRoutingID(); 141 webview_info.embedder_routing_id = embedder_web_contents()->GetRoutingID();
116 webview_info.guest_instance_id = guest_instance_id(); 142 webview_info.guest_instance_id = guest_instance_id();
117 webview_info.instance_id = view_instance_id(); 143 webview_info.instance_id = view_instance_id();
118 144
119 content::BrowserThread::PostTask( 145 content::BrowserThread::PostTask(
120 content::BrowserThread::IO, FROM_HERE, 146 content::BrowserThread::IO, FROM_HERE,
121 base::Bind( 147 base::Bind(
122 &ExtensionRendererState::AddWebView, 148 &ExtensionRendererState::AddWebView,
123 base::Unretained(ExtensionRendererState::GetInstance()), 149 base::Unretained(ExtensionRendererState::GetInstance()),
124 guest_web_contents()->GetRenderProcessHost()->GetID(), 150 guest_web_contents()->GetRenderProcessHost()->GetID(),
125 guest_web_contents()->GetRoutingID(), 151 guest_web_contents()->GetRoutingID(),
126 webview_info)); 152 webview_info));
127 } 153 }
128 154
129 // static 155 // static
130 void WebViewGuest::RemoveWebViewFromExtensionRendererState( 156 void WebViewGuest::RemoveWebViewFromExtensionRendererState(
131 WebContents* web_contents) { 157 WebContents* web_contents) {
132 content::BrowserThread::PostTask( 158 content::BrowserThread::PostTask(
133 content::BrowserThread::IO, FROM_HERE, 159 content::BrowserThread::IO, FROM_HERE,
134 base::Bind( 160 base::Bind(
135 &ExtensionRendererState::RemoveWebView, 161 &ExtensionRendererState::RemoveWebView,
136 base::Unretained(ExtensionRendererState::GetInstance()), 162 base::Unretained(ExtensionRendererState::GetInstance()),
137 web_contents->GetRenderProcessHost()->GetID(), 163 web_contents->GetRenderProcessHost()->GetID(),
138 web_contents->GetRoutingID())); 164 web_contents->GetRoutingID()));
139 } 165 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698