diff options
author | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-22 16:08:52 +0000 |
---|---|---|
committer | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-22 16:08:52 +0000 |
commit | dec0e9eee502fb75880afe0c04c8bd8bc2c3e9f7 (patch) | |
tree | 5116a651f94056bc0a28ec22b91bc86cd6231164 | |
parent | 7c677c4fccf4edfa8f12fb7151786688f3b4c6cc (diff) | |
download | chromium_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
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 }); + }, + ]); + }); + }); +} |