Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5181)

Unified Diff: chrome/browser/extensions/api/streams_private/streams_private_apitest.cc

Issue 161003002: Do not trigger CrossSiteResourceHandler for streams or user certs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/streams_private/streams_private_apitest.cc
diff --git a/chrome/browser/extensions/api/streams_private/streams_private_apitest.cc b/chrome/browser/extensions/api/streams_private/streams_private_apitest.cc
index 402b7e8fc5eb5b1cb00da4eaa9cb78bf1fe1ef1f..333de0f7f19c5222292e77a490d2415f92d9517d 100644
--- a/chrome/browser/extensions/api/streams_private/streams_private_apitest.cc
+++ b/chrome/browser/extensions/api/streams_private/streams_private_apitest.cc
@@ -22,6 +22,7 @@
#include "content/public/test/download_test_observer.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_system.h"
+#include "net/dns/mock_host_resolver.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
@@ -57,7 +58,7 @@ scoped_ptr<HttpResponse> HandleRequest(const HttpRequest& request) {
return response.PassAs<HttpResponse>();
}
- // For relative path "/test_path_attch.txt", return success response with
+ // For relative path "/text_path_attch.txt", return success response with
// MIME type "plain/text" and content "txt content". Also, set content
// disposition to be attachment.
if (request.relative_url == "/text_path_attch.txt") {
@@ -68,6 +69,7 @@ scoped_ptr<HttpResponse> HandleRequest(const HttpRequest& request) {
"attachment; filename=test_path.txt");
return response.PassAs<HttpResponse>();
}
+
// For relative path "/test_path_attch.txt", return success response with
// MIME type "plain/text" and content "txt content".
if (request.relative_url == "/text_path.txt") {
@@ -77,6 +79,20 @@ scoped_ptr<HttpResponse> HandleRequest(const HttpRequest& request) {
return response.PassAs<HttpResponse>();
}
+ // A random HTML file to navigate to.
+ if (request.relative_url == "/index.html") {
+ response->set_code(net::HTTP_OK);
+ response->set_content("html content");
+ response->set_content_type("text/html");
+ return response.PassAs<HttpResponse>();
+ }
+
+ // Respond to /favicon.ico for navigating to the page.
+ if (request.relative_url == "/favicon.ico") {
+ response->set_code(net::HTTP_NOT_FOUND);
+ return response.PassAs<HttpResponse>();
+ }
+
// No other requests should be handled in the tests.
EXPECT_TRUE(false) << "NOTREACHED!";
response->set_code(net::HTTP_NOT_FOUND);
@@ -228,6 +244,48 @@ IN_PROC_BROWSER_TEST_F(StreamsPrivateApiTest, Navigate) {
EXPECT_TRUE(catcher.GetNextResult());
}
+// Tests that navigating cross-site to a resource with a MIME type handleable by
+// an installed, white-listed extension invokes the extension's
+// onExecuteContentHandler event (and does not start a download).
+// Regression test for http://crbug.com/342999.
+IN_PROC_BROWSER_TEST_F(StreamsPrivateApiTest, NavigateCrossSite) {
+#if defined(OS_WIN) && defined(USE_ASH)
+ // Disable this test in Metro+Ash for now (http://crbug.com/262796).
+ if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests))
+ return;
+#endif
+
+ ASSERT_TRUE(LoadTestExtension()) << message_;
+
+ ResultCatcher catcher;
+
+ // Navigate to a URL on a different hostname.
+ std::string initial_host = "www.example.com";
+ host_resolver()->AddRule(initial_host, "127.0.0.1");
+ GURL::Replacements replacements;
+ replacements.SetHostStr(initial_host);
+ GURL initial_url =
+ test_server_->GetURL("/index.html").ReplaceComponents(replacements);
+ ui_test_utils::NavigateToURL(browser(), initial_url);
+
+ // Now navigate to the doc file; the extension should pick it up normally.
+ ui_test_utils::NavigateToURL(browser(),
+ test_server_->GetURL("/doc_path.doc"));
+
+ // Wait for the response from the test server.
+ base::MessageLoop::current()->RunUntilIdle();
+
+ // There should be no downloads started by the navigation.
+ DownloadManager* download_manager = GetDownloadManager();
+ std::vector<DownloadItem*> downloads;
+ download_manager->GetAllDownloads(&downloads);
+ ASSERT_EQ(0u, downloads.size());
+
+ // The test extension should receive onExecuteContentHandler event with MIME
+ // type 'application/msword' (and call chrome.test.notifySuccess).
+ EXPECT_TRUE(catcher.GetNextResult());
+}
+
// Tests that navigation to an attachment starts a download, even if there is an
// extension with a file browser handler that can handle the attachment's MIME
// type.
@@ -238,7 +296,7 @@ IN_PROC_BROWSER_TEST_F(StreamsPrivateApiTest, NavigateToAnAttachment) {
ResultCatcher catcher;
- // The test should start a downloadm.
+ // The test should start a download.
DownloadManager* download_manager = GetDownloadManager();
scoped_ptr<content::DownloadTestObserver> download_observer(
new content::DownloadTestObserverInProgress(download_manager, 1));

Powered by Google App Engine
This is Rietveld 408576698