summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_webnavigation_api.cc
diff options
context:
space:
mode:
authorjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-05 08:07:17 +0000
committerjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-05 08:07:17 +0000
commitfdd94a02f3eeeaff9c13c4fb83b13734cca69859 (patch)
tree8270a7e5e5b895bbc9824b06b1d821a57dafc850 /chrome/browser/extensions/extension_webnavigation_api.cc
parent60b06601b62b9830b39b562db06087fa5cd84060 (diff)
downloadchromium_src-fdd94a02f3eeeaff9c13c4fb83b13734cca69859.zip
chromium_src-fdd94a02f3eeeaff9c13c4fb83b13734cca69859.tar.gz
chromium_src-fdd94a02f3eeeaff9c13c4fb83b13734cca69859.tar.bz2
Implement onCompleted event for the webNavigation API
BUG=50943 TEST=browser_tests:*.WebNavigationEvents* Review URL: http://codereview.chromium.org/4448003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65182 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_webnavigation_api.cc')
-rw-r--r--chrome/browser/extensions/extension_webnavigation_api.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extension_webnavigation_api.cc b/chrome/browser/extensions/extension_webnavigation_api.cc
index 3b5f0e3..9a3e4ab 100644
--- a/chrome/browser/extensions/extension_webnavigation_api.cc
+++ b/chrome/browser/extensions/extension_webnavigation_api.cc
@@ -120,6 +120,9 @@ void ExtensionWebNavigationEventRouter::Init() {
NotificationType::FRAME_DOM_CONTENT_LOADED,
NotificationService::AllSources());
registrar_.Add(this,
+ NotificationType::FRAME_DID_FINISH_LOAD,
+ NotificationService::AllSources());
+ registrar_.Add(this,
NotificationType::FAIL_PROVISIONAL_LOAD_WITH_ERROR,
NotificationService::AllSources());
registrar_.Add(this,
@@ -148,6 +151,11 @@ void ExtensionWebNavigationEventRouter::Observe(
Source<NavigationController>(source).ptr(),
*Details<long long>(details).ptr());
break;
+ case NotificationType::FRAME_DID_FINISH_LOAD:
+ FrameDidFinishLoad(
+ Source<NavigationController>(source).ptr(),
+ *Details<long long>(details).ptr());
+ break;
case NotificationType::FAIL_PROVISIONAL_LOAD_WITH_ERROR:
FailProvisionalLoadWithError(
Source<NavigationController>(source).ptr(),
@@ -233,6 +241,25 @@ void ExtensionWebNavigationEventRouter::FrameDomContentLoaded(
DispatchEvent(controller->profile(), keys::kOnDOMContentLoaded, json_args);
}
+void ExtensionWebNavigationEventRouter::FrameDidFinishLoad(
+ NavigationController* controller, long long frame_id) {
+ if (!navigation_state_.CanSendEvents(frame_id))
+ return;
+ ListValue args;
+ DictionaryValue* dict = new DictionaryValue();
+ dict->SetInteger(keys::kTabIdKey,
+ ExtensionTabUtil::GetTabId(controller->tab_contents()));
+ dict->SetString(keys::kUrlKey, navigation_state_.GetUrl(frame_id).spec());
+ dict->SetInteger(keys::kFrameIdKey, navigation_state_.IsMainFrame(frame_id) ?
+ 0 : static_cast<int>(frame_id));
+ dict->SetReal(keys::kTimeStampKey, MilliSecondsFromTime(base::Time::Now()));
+ args.Append(dict);
+
+ std::string json_args;
+ base::JSONWriter::Write(&args, false, &json_args);
+ DispatchEvent(controller->profile(), keys::kOnCompleted, json_args);
+}
+
void ExtensionWebNavigationEventRouter::FailProvisionalLoadWithError(
NavigationController* controller,
ProvisionalLoadDetails* details) {