diff options
author | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-05 08:07:17 +0000 |
---|---|---|
committer | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-05 08:07:17 +0000 |
commit | fdd94a02f3eeeaff9c13c4fb83b13734cca69859 (patch) | |
tree | 8270a7e5e5b895bbc9824b06b1d821a57dafc850 /chrome/browser/extensions/extension_webnavigation_api.cc | |
parent | 60b06601b62b9830b39b562db06087fa5cd84060 (diff) | |
download | chromium_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.cc | 27 |
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) { |