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

Side by Side Diff: chrome/browser/extensions/extension_webnavigation_api.cc

Issue 4448003: Implement onCompleted event for the webNavigation API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 10 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 // Implements the Chrome Extensions WebNavigation API. 5 // Implements the Chrome Extensions WebNavigation API.
6 6
7 #include "chrome/browser/extensions/extension_webnavigation_api.h" 7 #include "chrome/browser/extensions/extension_webnavigation_api.h"
8 8
9 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
10 #include "base/time.h" 10 #include "base/time.h"
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 registrar_.Add(this, 113 registrar_.Add(this,
114 NotificationType::FRAME_PROVISIONAL_LOAD_START, 114 NotificationType::FRAME_PROVISIONAL_LOAD_START,
115 NotificationService::AllSources()); 115 NotificationService::AllSources());
116 registrar_.Add(this, 116 registrar_.Add(this,
117 NotificationType::FRAME_PROVISIONAL_LOAD_COMMITTED, 117 NotificationType::FRAME_PROVISIONAL_LOAD_COMMITTED,
118 NotificationService::AllSources()); 118 NotificationService::AllSources());
119 registrar_.Add(this, 119 registrar_.Add(this,
120 NotificationType::FRAME_DOM_CONTENT_LOADED, 120 NotificationType::FRAME_DOM_CONTENT_LOADED,
121 NotificationService::AllSources()); 121 NotificationService::AllSources());
122 registrar_.Add(this, 122 registrar_.Add(this,
123 NotificationType::FRAME_DID_FINISH_LOAD,
124 NotificationService::AllSources());
125 registrar_.Add(this,
123 NotificationType::FAIL_PROVISIONAL_LOAD_WITH_ERROR, 126 NotificationType::FAIL_PROVISIONAL_LOAD_WITH_ERROR,
124 NotificationService::AllSources()); 127 NotificationService::AllSources());
125 registrar_.Add(this, 128 registrar_.Add(this,
126 NotificationType::TAB_CONTENTS_DESTROYED, 129 NotificationType::TAB_CONTENTS_DESTROYED,
127 NotificationService::AllSources()); 130 NotificationService::AllSources());
128 } 131 }
129 } 132 }
130 133
131 void ExtensionWebNavigationEventRouter::Observe( 134 void ExtensionWebNavigationEventRouter::Observe(
132 NotificationType type, 135 NotificationType type,
133 const NotificationSource& source, 136 const NotificationSource& source,
134 const NotificationDetails& details) { 137 const NotificationDetails& details) {
135 switch (type.value) { 138 switch (type.value) {
136 case NotificationType::FRAME_PROVISIONAL_LOAD_START: 139 case NotificationType::FRAME_PROVISIONAL_LOAD_START:
137 FrameProvisionalLoadStart( 140 FrameProvisionalLoadStart(
138 Source<NavigationController>(source).ptr(), 141 Source<NavigationController>(source).ptr(),
139 Details<ProvisionalLoadDetails>(details).ptr()); 142 Details<ProvisionalLoadDetails>(details).ptr());
140 break; 143 break;
141 case NotificationType::FRAME_PROVISIONAL_LOAD_COMMITTED: 144 case NotificationType::FRAME_PROVISIONAL_LOAD_COMMITTED:
142 FrameProvisionalLoadCommitted( 145 FrameProvisionalLoadCommitted(
143 Source<NavigationController>(source).ptr(), 146 Source<NavigationController>(source).ptr(),
144 Details<ProvisionalLoadDetails>(details).ptr()); 147 Details<ProvisionalLoadDetails>(details).ptr());
145 break; 148 break;
146 case NotificationType::FRAME_DOM_CONTENT_LOADED: 149 case NotificationType::FRAME_DOM_CONTENT_LOADED:
147 FrameDomContentLoaded( 150 FrameDomContentLoaded(
148 Source<NavigationController>(source).ptr(), 151 Source<NavigationController>(source).ptr(),
149 *Details<long long>(details).ptr()); 152 *Details<long long>(details).ptr());
150 break; 153 break;
154 case NotificationType::FRAME_DID_FINISH_LOAD:
155 FrameDidFinishLoad(
156 Source<NavigationController>(source).ptr(),
157 *Details<long long>(details).ptr());
158 break;
151 case NotificationType::FAIL_PROVISIONAL_LOAD_WITH_ERROR: 159 case NotificationType::FAIL_PROVISIONAL_LOAD_WITH_ERROR:
152 FailProvisionalLoadWithError( 160 FailProvisionalLoadWithError(
153 Source<NavigationController>(source).ptr(), 161 Source<NavigationController>(source).ptr(),
154 Details<ProvisionalLoadDetails>(details).ptr()); 162 Details<ProvisionalLoadDetails>(details).ptr());
155 break; 163 break;
156 164
157 case NotificationType::TAB_CONTENTS_DESTROYED: 165 case NotificationType::TAB_CONTENTS_DESTROYED:
158 navigation_state_.RemoveTabContentsState( 166 navigation_state_.RemoveTabContentsState(
159 Source<TabContents>(source).ptr()); 167 Source<TabContents>(source).ptr());
160 break; 168 break;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 dict->SetInteger(keys::kFrameIdKey, navigation_state_.IsMainFrame(frame_id) ? 234 dict->SetInteger(keys::kFrameIdKey, navigation_state_.IsMainFrame(frame_id) ?
227 0 : static_cast<int>(frame_id)); 235 0 : static_cast<int>(frame_id));
228 dict->SetReal(keys::kTimeStampKey, MilliSecondsFromTime(base::Time::Now())); 236 dict->SetReal(keys::kTimeStampKey, MilliSecondsFromTime(base::Time::Now()));
229 args.Append(dict); 237 args.Append(dict);
230 238
231 std::string json_args; 239 std::string json_args;
232 base::JSONWriter::Write(&args, false, &json_args); 240 base::JSONWriter::Write(&args, false, &json_args);
233 DispatchEvent(controller->profile(), keys::kOnDOMContentLoaded, json_args); 241 DispatchEvent(controller->profile(), keys::kOnDOMContentLoaded, json_args);
234 } 242 }
235 243
244 void ExtensionWebNavigationEventRouter::FrameDidFinishLoad(
245 NavigationController* controller, long long frame_id) {
246 if (!navigation_state_.CanSendEvents(frame_id))
247 return;
248 ListValue args;
249 DictionaryValue* dict = new DictionaryValue();
250 dict->SetInteger(keys::kTabIdKey,
251 ExtensionTabUtil::GetTabId(controller->tab_contents()));
252 dict->SetString(keys::kUrlKey, navigation_state_.GetUrl(frame_id).spec());
253 dict->SetInteger(keys::kFrameIdKey, navigation_state_.IsMainFrame(frame_id) ?
254 0 : static_cast<int>(frame_id));
255 dict->SetReal(keys::kTimeStampKey, MilliSecondsFromTime(base::Time::Now()));
256 args.Append(dict);
257
258 std::string json_args;
259 base::JSONWriter::Write(&args, false, &json_args);
260 DispatchEvent(controller->profile(), keys::kOnCompleted, json_args);
261 }
262
236 void ExtensionWebNavigationEventRouter::FailProvisionalLoadWithError( 263 void ExtensionWebNavigationEventRouter::FailProvisionalLoadWithError(
237 NavigationController* controller, 264 NavigationController* controller,
238 ProvisionalLoadDetails* details) { 265 ProvisionalLoadDetails* details) {
239 if (!navigation_state_.CanSendEvents(details->frame_id())) 266 if (!navigation_state_.CanSendEvents(details->frame_id()))
240 return; 267 return;
241 ListValue args; 268 ListValue args;
242 DictionaryValue* dict = new DictionaryValue(); 269 DictionaryValue* dict = new DictionaryValue();
243 dict->SetInteger(keys::kTabIdKey, 270 dict->SetInteger(keys::kTabIdKey,
244 ExtensionTabUtil::GetTabId(controller->tab_contents())); 271 ExtensionTabUtil::GetTabId(controller->tab_contents()));
245 dict->SetString(keys::kUrlKey, 272 dict->SetString(keys::kUrlKey,
(...skipping 12 matching lines...) Expand all
258 285
259 void ExtensionWebNavigationEventRouter::DispatchEvent( 286 void ExtensionWebNavigationEventRouter::DispatchEvent(
260 Profile* profile, 287 Profile* profile,
261 const char* event_name, 288 const char* event_name,
262 const std::string& json_args) { 289 const std::string& json_args) {
263 if (profile && profile->GetExtensionEventRouter()) { 290 if (profile && profile->GetExtensionEventRouter()) {
264 profile->GetExtensionEventRouter()->DispatchEventToRenderers( 291 profile->GetExtensionEventRouter()->DispatchEventToRenderers(
265 event_name, json_args, profile, GURL()); 292 event_name, json_args, profile, GURL());
266 } 293 }
267 } 294 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_webnavigation_api.h ('k') | chrome/browser/renderer_host/render_view_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698