summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/extensions/content_script_apitest.cc16
-rw-r--r--chrome/renderer/extensions/user_script_slave.cc5
-rwxr-xr-xnet/tools/testserver/testserver.py31
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.