diff options
author | tony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-27 22:13:49 +0000 |
---|---|---|
committer | tony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-27 22:13:49 +0000 |
commit | 076bca74bc87a189fe2fa3fa8d3e74438c2b7eac (patch) | |
tree | 31a923e3c6ecfe4486a9852979adc2ef0904914c /chrome | |
parent | e5d982d40c7d6a0e03da2c6772265bbf7455773f (diff) | |
download | chromium_src-076bca74bc87a189fe2fa3fa8d3e74438c2b7eac.zip chromium_src-076bca74bc87a189fe2fa3fa8d3e74438c2b7eac.tar.gz chromium_src-076bca74bc87a189fe2fa3fa8d3e74438c2b7eac.tar.bz2 |
Fix a crash when loading a multipart html page.
When loading a multipart page, the load hasn't been committed yet so
dataSource() is NULL. In that case, use the provisionalDataSource().
BUG=97592
TEST=covered by browser_tests
Review URL: http://codereview.chromium.org/8044003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@103027 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/extensions/content_script_apitest.cc | 16 | ||||
-rw-r--r-- | chrome/renderer/extensions/user_script_slave.cc | 5 |
2 files changed, 19 insertions, 2 deletions
diff --git a/chrome/browser/extensions/content_script_apitest.cc b/chrome/browser/extensions/content_script_apitest.cc index acd1a75..a5dda3b8 100644 --- a/chrome/browser/extensions/content_script_apitest.cc +++ b/chrome/browser/extensions/content_script_apitest.cc @@ -2,13 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/utf_string_conversions.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/extension_service.h" -#include "content/browser/tab_contents/tab_contents.h" #include "chrome/browser/ui/browser.h" #include "chrome/common/chrome_notification_types.h" #include "chrome/common/extensions/extension.h" #include "chrome/test/base/ui_test_utils.h" +#include "content/browser/tab_contents/tab_contents.h" #include "googleurl/src/gurl.h" #include "net/base/mock_host_resolver.h" @@ -59,6 +60,19 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, ContentScriptIgnoreHostPermissions) { "content_scripts/dont_match_host_permissions")) << message_; } +IN_PROC_BROWSER_TEST_F( + ExtensionApiTest, ContentScriptInjectedIntoMultipartPage) { + ASSERT_TRUE(StartTestServer()); + + // Start with a renderer already open at a URL. + GURL url(test_server()->GetURL("multipart-slow")); + ui_test_utils::NavigateToURL(browser(), url); + + string16 title; + ui_test_utils::GetCurrentTabTitle(browser(), &title); + EXPECT_EQ(std::string("PASS"), UTF16ToUTF8(title)); +} + // crbug.com/39249 -- content scripts js should not run on view source. IN_PROC_BROWSER_TEST_F(ExtensionApiTest, ContentScriptViewSource) { ASSERT_TRUE(StartTestServer()); diff --git a/chrome/renderer/extensions/user_script_slave.cc b/chrome/renderer/extensions/user_script_slave.cc index dbdec79..a623416 100644 --- a/chrome/renderer/extensions/user_script_slave.cc +++ b/chrome/renderer/extensions/user_script_slave.cc @@ -239,7 +239,10 @@ void UserScriptSlave::InjectScripts(WebFrame* frame, // changes to match the parent document after Gmail document.writes into // it to create the editor. // http://code.google.com/p/chromium/issues/detail?id=86742 - GURL data_source_url = GURL(frame->dataSource()->request().url()); + WebKit::WebDataSource* data_source = frame->dataSource() ? + frame->dataSource() : frame->provisionalDataSource(); + CHECK(data_source); + GURL data_source_url = GURL(data_source->request().url()); if (data_source_url.is_empty()) return; |