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

Unified Diff: content/browser/manifest/manifest_browsertest.cc

Issue 537053002: Implement ManifestManager to handle manifest in content/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@manifest_fetcher
Patch Set: fix content_browsertests compile Created 6 years, 3 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
« no previous file with comments | « content/browser/manifest/OWNERS ('k') | content/browser/manifest/manifest_manager_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/manifest/manifest_browsertest.cc
diff --git a/content/browser/manifest/manifest_browsertest.cc b/content/browser/manifest/manifest_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..52abc4b6bd135291d4bafa39a87b5d9f97bdbb22
--- /dev/null
+++ b/content/browser/manifest/manifest_browsertest.cc
@@ -0,0 +1,202 @@
+// Copyright 2014 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.
+
+#include "base/command_line.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/content_switches.h"
+#include "content/public/common/manifest.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_browser_test_utils.h"
+#include "content/public/test/test_navigation_observer.h"
+#include "content/shell/browser/shell.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
+
+namespace content {
+
+class ManifestBrowserTest : public ContentBrowserTest {
+ protected:
+ ManifestBrowserTest() {}
+ virtual ~ManifestBrowserTest() {}
+
+ void GetManifestAndWait() {
+ shell()->web_contents()->GetManifest(
+ base::Bind(&ManifestBrowserTest::OnGetManifest,
+ base::Unretained(this)));
+
+ message_loop_runner_ = new MessageLoopRunner();
+ message_loop_runner_->Run();
+ }
+
+ void OnGetManifest(const Manifest& manifest) {
+ manifest_ = manifest;
+ message_loop_runner_->Quit();
+ }
+
+ const Manifest& manifest() const {
+ return manifest_;
+ }
+
+ private:
+ scoped_refptr<MessageLoopRunner> message_loop_runner_;
+ Manifest manifest_;
+
+ DISALLOW_COPY_AND_ASSIGN(ManifestBrowserTest);
+};
+
+// If a page has no manifest, requesting a manifest should return the empty
+// manifest.
+IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, NoManifest) {
+ GURL test_url = GetTestUrl("manifest", "no-manifest.html");
+
+ TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
+ shell()->LoadURL(test_url);
+ navigation_observer.Wait();
+
+ GetManifestAndWait();
+ EXPECT_TRUE(manifest().IsEmpty());
+}
+
+// If a page manifest points to a 404 URL, requesting the manifest should return
+// the empty manifest.
+IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, 404Manifest) {
+ GURL test_url = GetTestUrl("manifest", "404-manifest.html");
+
+ TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
+ shell()->LoadURL(test_url);
+ navigation_observer.Wait();
+
+ GetManifestAndWait();
+ EXPECT_TRUE(manifest().IsEmpty());
+}
+
+// If a page has an empty manifest, requesting the manifest should return the
+// empty manifest.
+IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, EmptyManifest) {
+ GURL test_url = GetTestUrl("manifest", "empty-manifest.html");
+
+ TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
+ shell()->LoadURL(test_url);
+ navigation_observer.Wait();
+
+ GetManifestAndWait();
+ EXPECT_TRUE(manifest().IsEmpty());
+}
+
+// If a page's manifest can't be parsed correctly, requesting the manifest
+// should return an empty manifest.
+IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, ParseErrorManifest) {
+ GURL test_url = GetTestUrl("manifest", "parse-error-manifest.html");
+
+ TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
+ shell()->LoadURL(test_url);
+ navigation_observer.Wait();
+
+ GetManifestAndWait();
+ EXPECT_TRUE(manifest().IsEmpty());
+}
+
+// If a page has a manifest that can be fetched and parsed, requesting the
+// manifest should return a properly filled manifest.
+IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, DummyManifest) {
+ GURL test_url = GetTestUrl("manifest", "dummy-manifest.html");
+
+ TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
+ shell()->LoadURL(test_url);
+ navigation_observer.Wait();
+
+ GetManifestAndWait();
+ EXPECT_FALSE(manifest().IsEmpty());
+}
+
+// If a page changes manifest during its life-time, requesting the manifest
+// should return the current manifest.
+IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, DynamicManifest) {
+ GURL test_url = GetTestUrl("manifest", "dynamic-manifest.html");
+
+ TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
+ shell()->LoadURL(test_url);
+ navigation_observer.Wait();
+
+ {
+ GetManifestAndWait();
+ EXPECT_TRUE(manifest().IsEmpty());
+ }
+
+ {
+ std::string manifest_url =
+ GetTestUrl("manifest", "dummy-manifest.json").spec();
+ ASSERT_TRUE(content::ExecuteScript(
+ shell()->web_contents(), "setManifestTo('" + manifest_url + "')"));
+
+ GetManifestAndWait();
+ EXPECT_FALSE(manifest().IsEmpty());
+ }
+
+ {
+ std::string manifest_url =
+ GetTestUrl("manifest", "empty-manifest.json").spec();
+ ASSERT_TRUE(content::ExecuteScript(
+ shell()->web_contents(), "setManifestTo('" + manifest_url + "')"));
+
+ GetManifestAndWait();
+ EXPECT_TRUE(manifest().IsEmpty());
+ }
+}
+
+// If a page's manifest lives in a different origin, it should follow the CORS
+// rules and requesting the manifest should return an empty manifest (unless the
+// response contains CORS headers).
+IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, CORSManifest) {
+ scoped_ptr<net::test_server::EmbeddedTestServer> cors_embedded_test_server(
+ new net::test_server::EmbeddedTestServer);
+
+ ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
+ ASSERT_TRUE(cors_embedded_test_server->InitializeAndWaitUntilReady());
+ ASSERT_NE(embedded_test_server()->port(), cors_embedded_test_server->port());
+
+ GURL test_url =
+ embedded_test_server()->GetURL("/manifest/dynamic-manifest.html");
+
+ TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
+ shell()->LoadURL(test_url);
+ navigation_observer.Wait();
+
+ std::string manifest_url =
+ cors_embedded_test_server->GetURL("/manifest/dummy-manifest.json").spec();
+ ASSERT_TRUE(content::ExecuteScript(shell()->web_contents(),
+ "setManifestTo('" + manifest_url + "')"));
+
+ GetManifestAndWait();
+ EXPECT_TRUE(manifest().IsEmpty());
+}
+
+// If a page's manifest is in an unsecure origin while the page is in a secure
+// origin, requesting the manifest should return the empty manifest.
+IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, MixedContentManifest) {
+ scoped_ptr<net::SpawnedTestServer> https_server(new net::SpawnedTestServer(
+ net::SpawnedTestServer::TYPE_HTTPS,
+ net::BaseTestServer::SSLOptions(net::BaseTestServer::SSLOptions::CERT_OK),
+ base::FilePath(FILE_PATH_LITERAL("content/test/data"))));
+
+ ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
+ ASSERT_TRUE(https_server->Start());
+
+ GURL test_url =
+ embedded_test_server()->GetURL("/manifest/dynamic-manifest.html");
+
+ TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
+ shell()->LoadURL(test_url);
+ navigation_observer.Wait();
+
+ std::string manifest_url =
+ https_server->GetURL("/manifest/dummy-manifest.json").spec();
+ ASSERT_TRUE(content::ExecuteScript(shell()->web_contents(),
+ "setManifestTo('" + manifest_url + "')"));
+
+ GetManifestAndWait();
+ EXPECT_TRUE(manifest().IsEmpty());
+}
+
+} // namespace content
« no previous file with comments | « content/browser/manifest/OWNERS ('k') | content/browser/manifest/manifest_manager_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698