diff options
author | mlamouri <mlamouri@chromium.org> | 2015-02-04 02:52:47 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-04 10:53:44 +0000 |
commit | 2faf5ef9b44d6f03ea3c754c58f0a9faff981a8f (patch) | |
tree | b77b17f386f9342f166c47f9419b0779966f8007 | |
parent | 6c5c867d87fc9a053b1bb440518647d6741e6294 (diff) | |
download | chromium_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.cc | 28 | ||||
-rw-r--r-- | content/renderer/manifest/manifest_manager.cc | 5 | ||||
-rw-r--r-- | content/renderer/manifest/manifest_manager.h | 1 |
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 { |