summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
diff options
context:
space:
mode:
authorjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-05 12:50:07 +0000
committerjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-05 12:50:07 +0000
commitdabb0d1ddd62548ad899caf16ea4ac9a0f68593f (patch)
treec848ab25304cd520c7dca09083d8872052d88adf /chrome/browser/extensions
parenta22fa6825a1afeace5a9110ab4c732fd3c3ebe2c (diff)
downloadchromium_src-dabb0d1ddd62548ad899caf16ea4ac9a0f68593f.zip
chromium_src-dabb0d1ddd62548ad899caf16ea4ac9a0f68593f.tar.gz
chromium_src-dabb0d1ddd62548ad899caf16ea4ac9a0f68593f.tar.bz2
Implement the frame id required for the web navigation api.
BUG=50943 TEST=*.WebNavigationEvents Review URL: http://codereview.chromium.org/3561008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@61503 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions')
-rw-r--r--chrome/browser/extensions/extension_webnavigation_api.cc33
-rw-r--r--chrome/browser/extensions/extension_webnavigation_api.h3
2 files changed, 24 insertions, 12 deletions
diff --git a/chrome/browser/extensions/extension_webnavigation_api.cc b/chrome/browser/extensions/extension_webnavigation_api.cc
index 589d5b6..6281a06 100644
--- a/chrome/browser/extensions/extension_webnavigation_api.cc
+++ b/chrome/browser/extensions/extension_webnavigation_api.cc
@@ -21,6 +21,21 @@
namespace keys = extension_webnavigation_api_constants;
+namespace {
+
+// Returns 0 if the navigation happens in the main frame, or the frame ID
+// modulo 32 bits otherwise.
+int GetFrameId(ProvisionalLoadDetails* details) {
+ return details->main_frame() ? 0 : static_cast<int>(details->frame_id());
+}
+
+// Returns |time| as milliseconds since the epoch.
+double MilliSecondsFromTime(const base::Time& time) {
+ return 1000 * time.ToDoubleT();
+}
+
+} // namespace
+
// static
ExtensionWebNavigationEventRouter*
ExtensionWebNavigationEventRouter::GetInstance() {
@@ -75,11 +90,9 @@ void ExtensionWebNavigationEventRouter::FrameProvisionalLoadStart(
ExtensionTabUtil::GetTabId(controller->tab_contents()));
dict->SetString(keys::kUrlKey,
details->url().spec());
- dict->SetInteger(keys::kFrameIdKey, 0);
+ dict->SetInteger(keys::kFrameIdKey, GetFrameId(details));
dict->SetInteger(keys::kRequestIdKey, 0);
- dict->SetReal(keys::kTimeStampKey,
- static_cast<double>(
- (base::Time::Now() - base::Time::UnixEpoch()).InMilliseconds()));
+ dict->SetReal(keys::kTimeStampKey, MilliSecondsFromTime(base::Time::Now()));
args.Append(dict);
std::string json_args;
@@ -96,16 +109,14 @@ void ExtensionWebNavigationEventRouter::FrameProvisionalLoadCommitted(
ExtensionTabUtil::GetTabId(controller->tab_contents()));
dict->SetString(keys::kUrlKey,
details->url().spec());
- dict->SetInteger(keys::kFrameIdKey, 0);
+ dict->SetInteger(keys::kFrameIdKey, GetFrameId(details));
dict->SetString(keys::kTransitionTypeKey,
PageTransition::CoreTransitionString(
details->transition_type()));
dict->SetString(keys::kTransitionQualifiersKey,
PageTransition::QualifierString(
details->transition_type()));
- dict->SetReal(keys::kTimeStampKey,
- static_cast<double>(
- (base::Time::Now() - base::Time::UnixEpoch()).InMilliseconds()));
+ dict->SetReal(keys::kTimeStampKey, MilliSecondsFromTime(base::Time::Now()));
args.Append(dict);
std::string json_args;
@@ -122,12 +133,10 @@ void ExtensionWebNavigationEventRouter::FailProvisionalLoadWithError(
ExtensionTabUtil::GetTabId(controller->tab_contents()));
dict->SetString(keys::kUrlKey,
details->url().spec());
- dict->SetInteger(keys::kFrameIdKey, 0);
+ dict->SetInteger(keys::kFrameIdKey, GetFrameId(details));
dict->SetString(keys::kErrorKey,
std::string(net::ErrorToString(details->error_code())));
- dict->SetReal(keys::kTimeStampKey,
- static_cast<double>(
- (base::Time::Now() - base::Time::UnixEpoch()).InMilliseconds()));
+ dict->SetReal(keys::kTimeStampKey, MilliSecondsFromTime(base::Time::Now()));
args.Append(dict);
std::string json_args;
diff --git a/chrome/browser/extensions/extension_webnavigation_api.h b/chrome/browser/extensions/extension_webnavigation_api.h
index 95ba032..21cfb16 100644
--- a/chrome/browser/extensions/extension_webnavigation_api.h
+++ b/chrome/browser/extensions/extension_webnavigation_api.h
@@ -10,6 +10,8 @@
#define CHROME_BROWSER_EXTENSIONS_EXTENSION_WEBNAVIGATION_API_H_
#pragma once
+#include <map>
+
#include "base/singleton.h"
#include "chrome/browser/extensions/extension_function.h"
#include "chrome/common/notification_observer.h"
@@ -18,6 +20,7 @@
class NavigationController;
class ProvisionalLoadDetails;
+class TabContents;
// Observes navigation notifications and routes them as events to the extension
// system.