summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormlamouri <mlamouri@chromium.org>2015-02-04 02:52:47 -0800
committerCommit bot <commit-bot@chromium.org>2015-02-04 10:53:44 +0000
commit2faf5ef9b44d6f03ea3c754c58f0a9faff981a8f (patch)
treeb77b17f386f9342f166c47f9419b0779966f8007
parent6c5c867d87fc9a053b1bb440518647d6741e6294 (diff)
downloadchromium_src-2faf5ef9b44d6f03ea3c754c58f0a9faff981a8f.zip
chromium_src-2faf5ef9b44d6f03ea3c754c58f0a9faff981a8f.tar.gz
chromium_src-2faf5ef9b44d6f03ea3c754c58f0a9faff981a8f.tar.bz2
[Manifest] Update a RenderFrame's Manifest when navigated.
BUG=454457 Review URL: https://codereview.chromium.org/896823002 Cr-Commit-Position: refs/heads/master@{#314534}
-rw-r--r--content/browser/manifest/manifest_browsertest.cc28
-rw-r--r--content/renderer/manifest/manifest_manager.cc5
-rw-r--r--content/renderer/manifest/manifest_manager.h1
3 files changed, 34 insertions, 0 deletions
diff --git a/content/browser/manifest/manifest_browsertest.cc b/content/browser/manifest/manifest_browsertest.cc
index 404831d..b31d26a 100644
--- a/content/browser/manifest/manifest_browsertest.cc
+++ b/content/browser/manifest/manifest_browsertest.cc
@@ -281,4 +281,32 @@ IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, ParsingErrorsManifest) {
EXPECT_EQ(6u, console_error_count());
}
+// If a page has a manifest and the page is navigated to a page without a
+// manifest, the page's manifest should be updated.
+IN_PROC_BROWSER_TEST_F(ManifestBrowserTest, Navigation) {
+ {
+ 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());
+ EXPECT_EQ(0u, console_error_count());
+ }
+
+ {
+ 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());
+ EXPECT_EQ(0u, console_error_count());
+ }
+}
+
} // namespace content
diff --git a/content/renderer/manifest/manifest_manager.cc b/content/renderer/manifest/manifest_manager.cc
index 5c620c0..a5ee94c 100644
--- a/content/renderer/manifest/manifest_manager.cc
+++ b/content/renderer/manifest/manifest_manager.cc
@@ -101,6 +101,11 @@ void ManifestManager::DidChangeManifest() {
manifest_dirty_ = true;
}
+void ManifestManager::DidCommitProvisionalLoad(bool is_new_navigation) {
+ may_have_manifest_ = false;
+ manifest_dirty_ = true;
+}
+
void ManifestManager::FetchManifest() {
GURL url(render_frame()->GetWebFrame()->document().manifestURL());
diff --git a/content/renderer/manifest/manifest_manager.h b/content/renderer/manifest/manifest_manager.h
index 5874724..e6529f2 100644
--- a/content/renderer/manifest/manifest_manager.h
+++ b/content/renderer/manifest/manifest_manager.h
@@ -42,6 +42,7 @@ class ManifestManager : public RenderFrameObserver {
// RenderFrameObserver implementation.
bool OnMessageReceived(const IPC::Message& message) override;
void DidChangeManifest() override;
+ void DidCommitProvisionalLoad(bool is_new_navigation) override;
private:
enum ResolveState {