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

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

Issue 748373003: Report errors when parsing Manifest and expose them in developer console. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: use web contents delagate to catch console messages Created 6 years, 1 month 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: content/browser/manifest/manifest_browsertest.cc
diff --git a/content/browser/manifest/manifest_browsertest.cc b/content/browser/manifest/manifest_browsertest.cc
index 8eaca0a9445b8c0f71df17091ee0c244347f3a33..43fd60c1e845dd897bfc50747a07b65377fbb90d 100644
--- a/content/browser/manifest/manifest_browsertest.cc
+++ b/content/browser/manifest/manifest_browsertest.cc
@@ -15,11 +15,42 @@
namespace content {
+class ManifestBrowserTest;
+
+// Mock of a WebContentsDelegate that catches messages sent to the console.
+class MockWebContentsDelegate : public content::WebContentsDelegate {
Peter Beverloo 2014/11/27 14:37:37 nit: no need for content::
mlamouri (slow - plz ping) 2014/11/27 14:44:10 Done.
+ public:
+ MockWebContentsDelegate(WebContents* web_contents, ManifestBrowserTest* test)
+ : web_contents_(web_contents),
+ test_(test) {
+ }
+
+ bool AddMessageToConsole(WebContents* source,
+ int32 level,
+ const base::string16& message,
+ int32 line_no,
+ const base::string16& source_id) override;
+
+ private:
+ WebContents* web_contents_;
+ ManifestBrowserTest* test_;
+};
+
class ManifestBrowserTest : public ContentBrowserTest {
protected:
- ManifestBrowserTest() {}
+ friend MockWebContentsDelegate;
+
+ ManifestBrowserTest() : console_error_count_(0) {}
~ManifestBrowserTest() override {}
+ void OverrideWebContentsDelegate() {
Peter Beverloo 2014/11/27 14:37:37 I wonder if we could do this in SetUp(), avoiding
mlamouri (slow - plz ping) 2014/11/27 14:44:10 I've been experimenting with that but the DCHECK w
+ DCHECK(shell()->web_contents());
+
+ mock_web_contents_delegate_.reset(
+ new MockWebContentsDelegate(shell()->web_contents(), this));
+ shell()->web_contents()->SetDelegate(mock_web_contents_delegate_.get());
+ }
+
void GetManifestAndWait() {
shell()->web_contents()->GetManifest(
base::Bind(&ManifestBrowserTest::OnGetManifest,
@@ -38,24 +69,55 @@ class ManifestBrowserTest : public ContentBrowserTest {
return manifest_;
}
+ unsigned int console_error_count() const {
+ return console_error_count_;
+ }
+
+ void OnReceivedConsoleError() {
+ console_error_count_++;
+ }
+
private:
scoped_refptr<MessageLoopRunner> message_loop_runner_;
+ scoped_ptr<MockWebContentsDelegate> mock_web_contents_delegate_;
Manifest manifest_;
+ int console_error_count_;
DISALLOW_COPY_AND_ASSIGN(ManifestBrowserTest);
};
+// The implementation of AddMessageToConsole isn't inlined because it needs
+// to know about |test_|.
+bool MockWebContentsDelegate::AddMessageToConsole(
+ WebContents* source,
+ int32 level,
+ const base::string16& message,
+ int32 line_no,
+ const base::string16& source_id) {
+ if (source != web_contents_)
Peter Beverloo 2014/11/27 14:37:37 When does this happen? Can it be a DCHECK?
mlamouri (slow - plz ping) 2014/11/27 14:44:10 Done.
+ return false;
+
+ if (level != logging::LOG_ERROR)
+ return false;
+
+ test_->OnReceivedConsoleError();
+ return false;
+}
+
// 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");
+ OverrideWebContentsDelegate();
+
TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
shell()->LoadURL(test_url);
navigation_observer.Wait();
GetManifestAndWait();
EXPECT_TRUE(manifest().IsEmpty());
+ EXPECT_EQ(0u, console_error_count());
}
// If a page manifest points to a 404 URL, requesting the manifest should return
@@ -63,12 +125,15 @@ IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, NoManifest) {
IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, 404Manifest) {
GURL test_url = GetTestUrl("manifest", "404-manifest.html");
+ OverrideWebContentsDelegate();
+
TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
shell()->LoadURL(test_url);
navigation_observer.Wait();
GetManifestAndWait();
EXPECT_TRUE(manifest().IsEmpty());
+ EXPECT_EQ(0u, console_error_count());
}
// If a page has an empty manifest, requesting the manifest should return the
@@ -76,12 +141,15 @@ IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, 404Manifest) {
IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, EmptyManifest) {
GURL test_url = GetTestUrl("manifest", "empty-manifest.html");
+ OverrideWebContentsDelegate();
+
TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
shell()->LoadURL(test_url);
navigation_observer.Wait();
GetManifestAndWait();
EXPECT_TRUE(manifest().IsEmpty());
+ EXPECT_EQ(0u, console_error_count());
}
// If a page's manifest can't be parsed correctly, requesting the manifest
@@ -89,12 +157,15 @@ IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, EmptyManifest) {
IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, ParseErrorManifest) {
GURL test_url = GetTestUrl("manifest", "parse-error-manifest.html");
+ OverrideWebContentsDelegate();
+
TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
shell()->LoadURL(test_url);
navigation_observer.Wait();
GetManifestAndWait();
EXPECT_TRUE(manifest().IsEmpty());
+ EXPECT_EQ(1u, console_error_count());
}
// If a page has a manifest that can be fetched and parsed, requesting the
@@ -102,12 +173,15 @@ IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, ParseErrorManifest) {
IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, DummyManifest) {
GURL test_url = GetTestUrl("manifest", "dummy-manifest.html");
+ OverrideWebContentsDelegate();
+
TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
shell()->LoadURL(test_url);
navigation_observer.Wait();
GetManifestAndWait();
EXPECT_FALSE(manifest().IsEmpty());
+ EXPECT_EQ(0u, console_error_count());
}
// If a page changes manifest during its life-time, requesting the manifest
@@ -115,6 +189,8 @@ IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, DummyManifest) {
IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, DynamicManifest) {
GURL test_url = GetTestUrl("manifest", "dynamic-manifest.html");
+ OverrideWebContentsDelegate();
+
TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
shell()->LoadURL(test_url);
navigation_observer.Wait();
@@ -143,6 +219,8 @@ IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, DynamicManifest) {
GetManifestAndWait();
EXPECT_TRUE(manifest().IsEmpty());
}
+
+ EXPECT_EQ(0u, console_error_count());
}
// If a page's manifest lives in a different origin, it should follow the CORS
@@ -159,6 +237,8 @@ IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, CORSManifest) {
GURL test_url =
embedded_test_server()->GetURL("/manifest/dynamic-manifest.html");
+ OverrideWebContentsDelegate();
+
TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
shell()->LoadURL(test_url);
navigation_observer.Wait();
@@ -170,6 +250,8 @@ IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, CORSManifest) {
GetManifestAndWait();
EXPECT_TRUE(manifest().IsEmpty());
+
+ EXPECT_EQ(0u, console_error_count());
}
// If a page's manifest is in an unsecure origin while the page is in a secure
@@ -186,6 +268,8 @@ IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, MixedContentManifest) {
GURL test_url =
embedded_test_server()->GetURL("/manifest/dynamic-manifest.html");
+ OverrideWebContentsDelegate();
+
TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
shell()->LoadURL(test_url);
navigation_observer.Wait();
@@ -197,6 +281,24 @@ IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, MixedContentManifest) {
GetManifestAndWait();
EXPECT_TRUE(manifest().IsEmpty());
+
+ EXPECT_EQ(0u, console_error_count());
+}
+
+// If a page's manifest has some parsing errors, they should show up in the
+// developer console.
+IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, ParsingErrorsManifest) {
+ GURL test_url = GetTestUrl("manifest", "parsing-errors.html");
+
+ OverrideWebContentsDelegate();
+
+ TestNavigationObserver navigation_observer(shell()->web_contents(), 1);
+ shell()->LoadURL(test_url);
+ navigation_observer.Wait();
+
+ GetManifestAndWait();
+ EXPECT_TRUE(manifest().IsEmpty());
+ EXPECT_EQ(6u, console_error_count());
}
} // namespace content
« no previous file with comments | « no previous file | content/renderer/manifest/manifest_manager.cc » ('j') | content/renderer/manifest/manifest_parser.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698