diff options
-rw-r--r-- | chrome/browser/extensions/content_script_apitest.cc | 16 | ||||
-rw-r--r-- | chrome/renderer/extensions/user_script_slave.cc | 5 | ||||
-rwxr-xr-x | net/tools/testserver/testserver.py | 31 |
3 files changed, 49 insertions, 3 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; diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py index 7f9e17a..0849a29 100755 --- a/net/tools/testserver/testserver.py +++ b/net/tools/testserver/testserver.py @@ -343,6 +343,7 @@ class TestPageHandler(BasePageHandler): self.ServerRedirectHandler, self.ClientRedirectHandler, self.MultipartHandler, + self.MultipartSlowHandler, self.DefaultResponseHandler] post_handlers = [ self.EchoTitleHandler, @@ -1290,7 +1291,7 @@ class TestPageHandler(BasePageHandler): def MultipartHandler(self): """Send a multipart response (10 text/html pages).""" - test_name = "/multipart" + test_name = '/multipart' if not self._ShouldHandleRequest(test_name): return False @@ -1310,6 +1311,34 @@ class TestPageHandler(BasePageHandler): self.wfile.write('--' + bound + '--') return True + def MultipartSlowHandler(self): + """Send a multipart response (3 text/html pages) with a slight delay + between each page. This is similar to how some pages show status using + multipart.""" + test_name = '/multipart-slow' + if not self._ShouldHandleRequest(test_name): + return False + + num_frames = 3 + bound = '12345' + self.send_response(200) + self.send_header('Content-type', + 'multipart/x-mixed-replace;boundary=' + bound) + self.end_headers() + + for i in xrange(num_frames): + self.wfile.write('--' + bound + '\r\n') + self.wfile.write('Content-type: text/html\r\n\r\n') + time.sleep(0.25) + if i == 2: + self.wfile.write('<title>PASS</title>') + else: + self.wfile.write('<title>page ' + str(i) + '</title>') + self.wfile.write('page ' + str(i) + '<!-- ' + ('x' * 2048) + '-->') + + self.wfile.write('--' + bound + '--') + return True + def DefaultResponseHandler(self): """This is the catch-all response handler for requests that aren't handled by one of the special handlers above. |