summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-22 16:08:52 +0000
committerjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-22 16:08:52 +0000
commitdec0e9eee502fb75880afe0c04c8bd8bc2c3e9f7 (patch)
tree5116a651f94056bc0a28ec22b91bc86cd6231164
parent7c677c4fccf4edfa8f12fb7151786688f3b4c6cc (diff)
downloadchromium_src-dec0e9eee502fb75880afe0c04c8bd8bc2c3e9f7.zip
chromium_src-dec0e9eee502fb75880afe0c04c8bd8bc2c3e9f7.tar.gz
chromium_src-dec0e9eee502fb75880afe0c04c8bd8bc2c3e9f7.tar.bz2
Update the tracked URL of a frame if it changes during a navigation
BUG=none TEST=browser tests Review URL: http://codereview.chromium.org/7488011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93647 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/extension_webnavigation_api.cc19
-rw-r--r--chrome/browser/extensions/extension_webnavigation_apitest.cc14
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/serverRedirect/a.html1
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/test_serverRedirect.html5
-rw-r--r--chrome/test/data/extensions/api_test/webnavigation/test_serverRedirect.js48
5 files changed, 80 insertions, 7 deletions
diff --git a/chrome/browser/extensions/extension_webnavigation_api.cc b/chrome/browser/extensions/extension_webnavigation_api.cc
index 16894407..baa24d1 100644
--- a/chrome/browser/extensions/extension_webnavigation_api.cc
+++ b/chrome/browser/extensions/extension_webnavigation_api.cc
@@ -320,10 +320,21 @@ void ExtensionWebNavigationTabObserver::DidCommitProvisionalLoadForFrame(
PageTransition::Type transition_type) {
if (!navigation_state_.CanSendEvents(frame_id))
return;
+
+ bool is_reference_fragment_navigation =
+ IsReferenceFragmentNavigation(frame_id, url);
+
+ // Update the URL as it might have changed.
+ navigation_state_.TrackFrame(frame_id,
+ url,
+ is_main_frame,
+ false,
+ tab_contents());
+
// On reference fragment navigations, only a new navigation state is
// committed. We need to catch this case and generate a full sequence
// of events.
- if (IsReferenceFragmentNavigation(frame_id, url)) {
+ if (is_reference_fragment_navigation) {
NavigatedReferenceFragment(frame_id, is_main_frame, url, transition_type);
return;
}
@@ -424,12 +435,6 @@ void ExtensionWebNavigationTabObserver::NavigatedReferenceFragment(
bool is_main_frame,
const GURL& url,
PageTransition::Type transition_type) {
- navigation_state_.TrackFrame(frame_id,
- url,
- is_main_frame,
- false,
- tab_contents());
-
DispatchOnBeforeNavigate(tab_contents(),
frame_id,
is_main_frame,
diff --git a/chrome/browser/extensions/extension_webnavigation_apitest.cc b/chrome/browser/extensions/extension_webnavigation_apitest.cc
index db52ec4..7121a94 100644
--- a/chrome/browser/extensions/extension_webnavigation_apitest.cc
+++ b/chrome/browser/extensions/extension_webnavigation_apitest.cc
@@ -11,6 +11,7 @@
#include "chrome/common/chrome_switches.h"
#include "chrome/test/ui_test_utils.h"
#include "content/browser/tab_contents/tab_contents.h"
+#include "net/base/mock_host_resolver.h"
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigation) {
CommandLine::ForCurrentProcess()->AppendSwitch(
@@ -33,6 +34,19 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationClientRedirect) {
<< message_;
}
+IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationServerRedirect) {
+ CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kEnableExperimentalExtensionApis);
+
+ FrameNavigationState::set_allow_extension_scheme(true);
+ host_resolver()->AddRule("*", "127.0.0.1");
+ ASSERT_TRUE(StartTestServer());
+
+ ASSERT_TRUE(
+ RunExtensionSubtest("webnavigation", "test_serverRedirect.html"))
+ << message_;
+}
+
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WebNavigationForwardBack) {
CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableExperimentalExtensionApis);
diff --git a/chrome/test/data/extensions/api_test/webnavigation/serverRedirect/a.html b/chrome/test/data/extensions/api_test/webnavigation/serverRedirect/a.html
new file mode 100644
index 0000000..18ecdcb
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/serverRedirect/a.html
@@ -0,0 +1 @@
+<html></html>
diff --git a/chrome/test/data/extensions/api_test/webnavigation/test_serverRedirect.html b/chrome/test/data/extensions/api_test/webnavigation/test_serverRedirect.html
new file mode 100644
index 0000000..769dc4b
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/test_serverRedirect.html
@@ -0,0 +1,5 @@
+<script src="test_serverRedirect.js"></script>
+<script src="framework.js"></script>
+<script>
+ runTests();
+</script>
diff --git a/chrome/test/data/extensions/api_test/webnavigation/test_serverRedirect.js b/chrome/test/data/extensions/api_test/webnavigation/test_serverRedirect.js
new file mode 100644
index 0000000..96502ce
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/webnavigation/test_serverRedirect.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+function runTests() {
+ var getURL = chrome.extension.getURL;
+ var URL_LOAD = "http://www.a.com:PORT/files/extensions/api_test/webnavigation/serverRedirect/a.html";
+ var URL_LOAD_REDIRECT = "http://www.a.com:PORT/server-redirect?" + URL_LOAD;
+ chrome.tabs.create({"url": "about:blank"}, function(tab) {
+ var tabId = tab.id;
+ chrome.test.getConfig(function(config) {
+ var fixPort = function(url) {
+ return url.replace(/PORT/g, config.testServer.port);
+ };
+ URL_LOAD_REDIRECT = fixPort(URL_LOAD_REDIRECT);
+ URL_LOAD = fixPort(URL_LOAD);
+ chrome.test.runTests([
+ // Navigates to a page that redirects (on the server side) to a.html.
+ function serverRedirect() {
+ expect([
+ [ "onBeforeNavigate",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_LOAD_REDIRECT }],
+ [ "onCommitted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ transitionQualifiers: [],
+ transitionType: "link",
+ url: URL_LOAD }],
+ [ "onDOMContentLoaded",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_LOAD }],
+ [ "onCompleted",
+ { frameId: 0,
+ tabId: 0,
+ timeStamp: 0,
+ url: URL_LOAD }]]);
+ chrome.tabs.update(tabId, { url: URL_LOAD_REDIRECT });
+ },
+ ]);
+ });
+ });
+}