#include "content/browser/frame_host/cross_site_transferring_request.h"
#include "content/browser/frame_host/interstitial_page_impl.h"
#include "content/browser/frame_host/navigation_entry_impl.h"
+#include "content/browser/media/audio_stream_monitor.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/site_instance_impl.h"
#include "content/browser/webui/web_ui_controller_factory_registry.h"
void TestDidNavigate(int page_id, const GURL& url) {
FrameHostMsg_DidCommitProvisionalLoad_Params params;
- InitNavigateParams(¶ms, page_id, url, PAGE_TRANSITION_TYPED);
+ InitNavigateParams(¶ms, page_id, url, ui::PAGE_TRANSITION_TYPED);
DidNavigate(GetRenderViewHostForTesting(), params);
}
static_cast<NavigationControllerImpl&>(controller());
FrameHostMsg_DidCommitProvisionalLoad_Params params;
InitNavigateParams(
- ¶ms, 0, GURL(url::kAboutBlankURL), PAGE_TRANSITION_TYPED);
+ ¶ms, 0, GURL(url::kAboutBlankURL), ui::PAGE_TRANSITION_TYPED);
LoadCommittedDetails details;
cont.RendererDidNavigate(contents()->GetMainFrame(), params, &details);
TEST_F(WebContentsImplTest, DontUseTitleFromPendingEntry) {
const GURL kGURL("chrome://blah");
controller().LoadURL(
- kGURL, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_EQ(base::string16(), contents()->GetTitle());
}
const GURL kGURL("chrome://blah");
const base::string16 title = base::ASCIIToUTF16("My Title");
controller().LoadURL(
- kGURL, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
NavigationEntry* entry = controller().GetVisibleEntry();
ASSERT_EQ(kGURL, entry->GetURL());
process()->sink().ClearMessages();
cont.LoadURL(
- kGURL, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
rvh()->GetDelegate()->RenderViewCreated(rvh());
// Did we get the expected message?
EXPECT_TRUE(process()->sink().GetFirstMessageMatching(
ViewMsg_EnableViewSourceMode::ID));
FrameHostMsg_DidCommitProvisionalLoad_Params params;
- InitNavigateParams(¶ms, 0, kGURL, PAGE_TRANSITION_TYPED);
+ InitNavigateParams(¶ms, 0, kGURL, ui::PAGE_TRANSITION_TYPED);
LoadCommittedDetails details;
cont.RendererDidNavigate(contents()->GetMainFrame(), params, &details);
// Also check title and url.
// Navigate to URL
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(instance1, orig_rfh->GetSiteInstance());
// Controller's pending entry will have a NULL site instance until we assign
site_instance() == NULL);
// DidNavigate from the page
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
EXPECT_EQ(instance1, orig_rfh->GetSiteInstance());
GetMaxURLChars() + 1, 'a'));
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_GENERATED, std::string());
+ url, Referrer(), ui::PAGE_TRANSITION_GENERATED, std::string());
EXPECT_TRUE(controller().GetVisibleEntry() == NULL);
}
// Navigate to URL. First URL should use first RenderViewHost.
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
// Keep the number of active views in orig_rfh's SiteInstance non-zero so that
// orig_rfh doesn't get deleted when it gets swapped out.
// Navigate to new site
const GURL url2("http://www.yahoo.com");
- controller().LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ controller().LoadURL(
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_TRUE(contents()->cross_navigation_pending());
EXPECT_EQ(url, contents()->GetLastCommittedURL());
EXPECT_EQ(url2, contents()->GetVisibleURL());
// DidNavigate from the pending page
contents()->TestDidNavigate(
- pending_rfh, 1, url2, PAGE_TRANSITION_TYPED);
+ pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
SiteInstance* instance2 = contents()->GetSiteInstance();
// Keep the number of active views in pending_rfh's SiteInstance
EXPECT_FALSE(goback_rfh->are_navigations_suspended());
// DidNavigate from the back action
- contents()->TestDidNavigate(goback_rfh, 1, url2, PAGE_TRANSITION_TYPED);
+ contents()->TestDidNavigate(goback_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(goback_rfh, contents()->GetMainFrame());
EXPECT_EQ(instance1, contents()->GetSiteInstance());
// Navigate to URL. First URL should use first RenderViewHost.
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(orig_rfh->GetRenderViewHost(), contents()->GetRenderViewHost());
- // Crash the renderer.
+ // Simulate a renderer crash.
orig_rfh->GetRenderViewHost()->set_render_view_created(false);
+ orig_rfh->set_render_frame_created(false);
// Navigate to new site. We should not go into PENDING.
const GURL url2("http://www.yahoo.com");
controller().LoadURL(
- url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
TestRenderFrameHost* new_rfh = contents()->GetMainFrame();
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
EXPECT_EQ(orig_rvh_delete_count, 1);
// DidNavigate from the new page
- contents()->TestDidNavigate(new_rfh, 1, url2, PAGE_TRANSITION_TYPED);
+ contents()->TestDidNavigate(new_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
SiteInstance* instance2 = contents()->GetSiteInstance();
EXPECT_FALSE(contents()->cross_navigation_pending());
// Navigate to URL. First URL should use first RenderViewHost.
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
// Open a new contents with the same SiteInstance, navigated to the same site.
scoped_ptr<TestWebContents> contents2(
TestWebContents::Create(browser_context(), instance1));
contents2->GetController().LoadURL(url, Referrer(),
- PAGE_TRANSITION_TYPED,
+ ui::PAGE_TRANSITION_TYPED,
std::string());
// Need this page id to be 2 since the site instance is the same (which is the
// scope of page IDs) and we want to consider this a new page.
contents2->TestDidNavigate(
- contents2->GetMainFrame(), 2, url, PAGE_TRANSITION_TYPED);
+ contents2->GetMainFrame(), 2, url, ui::PAGE_TRANSITION_TYPED);
// Navigate first contents to a new site.
const GURL url2a("http://www.yahoo.com");
controller().LoadURL(
- url2a, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url2a, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
orig_rfh->GetRenderViewHost()->SendBeforeUnloadACK(true);
TestRenderFrameHost* pending_rfh_a = contents()->GetPendingMainFrame();
contents()->TestDidNavigate(
- pending_rfh_a, 1, url2a, PAGE_TRANSITION_TYPED);
+ pending_rfh_a, 1, url2a, ui::PAGE_TRANSITION_TYPED);
SiteInstance* instance2a = contents()->GetSiteInstance();
EXPECT_NE(instance1, instance2a);
// Navigate second contents to the same site as the first tab.
const GURL url2b("http://mail.yahoo.com");
contents2->GetController().LoadURL(url2b, Referrer(),
- PAGE_TRANSITION_TYPED,
+ ui::PAGE_TRANSITION_TYPED,
std::string());
TestRenderFrameHost* rfh2 = contents2->GetMainFrame();
rfh2->GetRenderViewHost()->SendBeforeUnloadACK(true);
// NOTE(creis): We used to be in danger of showing a crash page here if the
// second contents hadn't navigated somewhere first (bug 1145430). That case
// is now covered by the CrossSiteBoundariesAfterCrash test.
- contents2->TestDidNavigate(pending_rfh_b, 2, url2b, PAGE_TRANSITION_TYPED);
+ contents2->TestDidNavigate(
+ pending_rfh_b, 2, url2b, ui::PAGE_TRANSITION_TYPED);
SiteInstance* instance2b = contents2->GetSiteInstance();
EXPECT_NE(instance1, instance2b);
// Navigate to an URL that will not assign a new SiteInstance.
const GURL native_url("non-site-url://stuffandthings");
controller().LoadURL(
- native_url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- contents()->TestDidNavigate(orig_rfh, 1, native_url, PAGE_TRANSITION_TYPED);
+ native_url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
+ contents()->TestDidNavigate(
+ orig_rfh, 1, native_url, ui::PAGE_TRANSITION_TYPED);
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
// Navigate to new site (should keep same site instance).
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(native_url, contents()->GetLastCommittedURL());
EXPECT_EQ(url, contents()->GetVisibleURL());
EXPECT_FALSE(contents()->GetPendingMainFrame());
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
// Keep the number of active views in orig_rfh's SiteInstance
// non-zero so that orig_rfh doesn't get deleted when it gets
// Navigate to another new site (should create a new site instance).
const GURL url2("http://www.yahoo.com");
controller().LoadURL(
- url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_TRUE(contents()->cross_navigation_pending());
EXPECT_EQ(url, contents()->GetLastCommittedURL());
EXPECT_EQ(url2, contents()->GetVisibleURL());
// DidNavigate from the pending page.
contents()->TestDidNavigate(
- pending_rfh, 1, url2, PAGE_TRANSITION_TYPED);
+ pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
SiteInstance* new_instance = contents()->GetSiteInstance();
EXPECT_FALSE(contents()->cross_navigation_pending());
const GURL native_url("non-site-url://stuffandthings");
std::vector<NavigationEntry*> entries;
NavigationEntry* entry = NavigationControllerImpl::CreateNavigationEntry(
- native_url, Referrer(), PAGE_TRANSITION_LINK, false, std::string(),
+ native_url, Referrer(), ui::PAGE_TRANSITION_LINK, false, std::string(),
browser_context());
entry->SetPageID(0);
entries.push_back(entry);
ASSERT_EQ(0u, entries.size());
ASSERT_EQ(1, controller().GetEntryCount());
controller().GoToIndex(0);
- contents()->TestDidNavigate(orig_rfh, 0, native_url, PAGE_TRANSITION_RELOAD);
+ contents()->TestDidNavigate(
+ orig_rfh, 0, native_url, ui::PAGE_TRANSITION_RELOAD);
EXPECT_EQ(orig_instance, contents()->GetSiteInstance());
EXPECT_EQ(GURL(), contents()->GetSiteInstance()->GetSiteURL());
EXPECT_FALSE(orig_instance->HasSite());
browser_client.set_assign_site_for_url(true);
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- contents()->TestDidNavigate(orig_rfh, 2, url, PAGE_TRANSITION_TYPED);
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
+ contents()->TestDidNavigate(orig_rfh, 2, url, ui::PAGE_TRANSITION_TYPED);
EXPECT_EQ(orig_instance, contents()->GetSiteInstance());
// Cleanup.
const GURL regular_url("http://www.yahoo.com");
std::vector<NavigationEntry*> entries;
NavigationEntry* entry = NavigationControllerImpl::CreateNavigationEntry(
- regular_url, Referrer(), PAGE_TRANSITION_LINK, false, std::string(),
+ regular_url, Referrer(), ui::PAGE_TRANSITION_LINK, false, std::string(),
browser_context());
entry->SetPageID(0);
entries.push_back(entry);
ASSERT_EQ(0u, entries.size());
ASSERT_EQ(1, controller().GetEntryCount());
controller().GoToIndex(0);
- contents()->TestDidNavigate(orig_rfh, 0, regular_url, PAGE_TRANSITION_RELOAD);
+ contents()->TestDidNavigate(
+ orig_rfh, 0, regular_url, ui::PAGE_TRANSITION_RELOAD);
EXPECT_EQ(orig_instance, contents()->GetSiteInstance());
EXPECT_TRUE(orig_instance->HasSite());
// Navigate to another site and verify that a new SiteInstance was created.
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
contents()->TestDidNavigate(
- contents()->GetPendingMainFrame(), 2, url, PAGE_TRANSITION_TYPED);
+ contents()->GetPendingMainFrame(), 2, url, ui::PAGE_TRANSITION_TYPED);
EXPECT_NE(orig_instance, contents()->GetSiteInstance());
// Cleanup.
// Navigate to a URL.
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
// Start to navigate first tab to a new site, so that it has a pending RVH.
const GURL url2("http://www.yahoo.com");
controller().LoadURL(
- url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
orig_rfh->GetRenderViewHost()->SendBeforeUnloadACK(true);
TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame();
// Navigate to URL.
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
contents()->TestDidNavigate(
- orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
// Open a related contents to a second site.
scoped_ptr<TestWebContents> contents2(
TestWebContents::Create(browser_context(), instance1));
const GURL url2("http://www.yahoo.com");
contents2->GetController().LoadURL(url2, Referrer(),
- PAGE_TRANSITION_TYPED,
+ ui::PAGE_TRANSITION_TYPED,
std::string());
// The first RVH in contents2 isn't live yet, so we shortcut the cross site
// pending.
TestRenderFrameHost* rfh2 = contents2->GetMainFrame();
EXPECT_FALSE(contents2->cross_navigation_pending());
- contents2->TestDidNavigate(rfh2, 2, url2, PAGE_TRANSITION_TYPED);
+ contents2->TestDidNavigate(rfh2, 2, url2, ui::PAGE_TRANSITION_TYPED);
SiteInstance* instance2 = contents2->GetSiteInstance();
EXPECT_NE(instance1, instance2);
EXPECT_FALSE(contents2->cross_navigation_pending());
// Simulate a link click in first contents to second site. Doesn't switch
// SiteInstances, because we don't intercept WebKit navigations.
contents()->TestDidNavigate(
- orig_rfh, 2, url2, PAGE_TRANSITION_TYPED);
+ orig_rfh, 2, url2, ui::PAGE_TRANSITION_TYPED);
SiteInstance* instance3 = contents()->GetSiteInstance();
EXPECT_EQ(instance1, instance3);
EXPECT_FALSE(contents()->cross_navigation_pending());
// compare against the current URL, not the SiteInstance's site.
const GURL url3("http://mail.yahoo.com");
controller().LoadURL(
- url3, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url3, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_FALSE(contents()->cross_navigation_pending());
contents()->TestDidNavigate(
- orig_rfh, 3, url3, PAGE_TRANSITION_TYPED);
+ orig_rfh, 3, url3, ui::PAGE_TRANSITION_TYPED);
SiteInstance* instance4 = contents()->GetSiteInstance();
EXPECT_EQ(instance1, instance4);
}
// Navigate to URL. First URL should use first RenderViewHost.
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
// Navigate to new site, but simulate an onbeforeunload denial.
const GURL url2("http://www.yahoo.com");
controller().LoadURL(
- url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
base::TimeTicks now = base::TimeTicks::Now();
orig_rfh->OnMessageReceived(
// Navigate again, but simulate an onbeforeunload approval.
controller().LoadURL(
- url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
now = base::TimeTicks::Now();
orig_rfh->OnMessageReceived(
// DidNavigate from the pending page.
contents()->TestDidNavigate(
- pending_rfh, 1, url2, PAGE_TRANSITION_TYPED);
+ pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
SiteInstance* instance2 = contents()->GetSiteInstance();
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(pending_rfh, contents()->GetMainFrame());
// Navigate to URL. First URL should use first RenderFrameHost.
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
// Navigate to new site, simulating an onbeforeunload approval.
const GURL url2("http://www.yahoo.com");
controller().LoadURL(
- url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
base::TimeTicks now = base::TimeTicks::Now();
orig_rfh->OnMessageReceived(FrameHostMsg_BeforeUnload_ACK(0, true, now, now));
// Start with a web ui page, which gets a new RVH with WebUI bindings.
const GURL url1("chrome://blah");
controller().LoadURL(
- url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
TestRenderFrameHost* ntp_rfh = contents()->GetMainFrame();
- contents()->TestDidNavigate(ntp_rfh, 1, url1, PAGE_TRANSITION_TYPED);
+ contents()->TestDidNavigate(ntp_rfh, 1, url1, ui::PAGE_TRANSITION_TYPED);
NavigationEntry* entry1 = controller().GetLastCommittedEntry();
SiteInstance* instance1 = contents()->GetSiteInstance();
// Navigate to new site.
const GURL url2("http://www.google.com");
controller().LoadURL(
- url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_TRUE(contents()->cross_navigation_pending());
TestRenderFrameHost* google_rfh = contents()->GetPendingMainFrame();
// DidNavigate from the pending page.
contents()->TestDidNavigate(
- google_rfh, 1, url2, PAGE_TRANSITION_TYPED);
+ google_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
NavigationEntry* entry2 = controller().GetLastCommittedEntry();
SiteInstance* instance2 = contents()->GetSiteInstance();
// Navigate to third page on same site.
const GURL url3("http://news.google.com");
controller().LoadURL(
- url3, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url3, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_FALSE(contents()->cross_navigation_pending());
contents()->TestDidNavigate(
- google_rfh, 2, url3, PAGE_TRANSITION_TYPED);
+ google_rfh, 2, url3, ui::PAGE_TRANSITION_TYPED);
NavigationEntry* entry3 = controller().GetLastCommittedEntry();
SiteInstance* instance3 = contents()->GetSiteInstance();
FrameHostMsg_BeforeUnload_ACK(0, true, now, now));
// DidNavigate from the first back. This aborts the second back's pending RFH.
- contents()->TestDidNavigate(google_rfh, 1, url2, PAGE_TRANSITION_TYPED);
+ contents()->TestDidNavigate(google_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
// We should commit this page and forget about the second back.
EXPECT_FALSE(contents()->cross_navigation_pending());
// Navigate to URL. First URL should use the original RenderFrameHost.
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
// Start navigating to new site.
const GURL url2("http://www.yahoo.com");
controller().LoadURL(
- url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
// Simulate a sub-frame navigation arriving and ensure the RVH is still
// waiting for a before unload response.
TestRenderFrameHost* child_rfh = orig_rfh->AppendChild("subframe");
child_rfh->SendNavigateWithTransition(
- 1, GURL("http://google.com/frame"), PAGE_TRANSITION_AUTO_SUBFRAME);
+ 1, GURL("http://google.com/frame"), ui::PAGE_TRANSITION_AUTO_SUBFRAME);
EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
// Now simulate the onbeforeunload approval and verify the navigation is
// Navigate to NTP URL.
const GURL url("chrome://blah");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
EXPECT_FALSE(contents()->cross_navigation_pending());
// Navigate to new site, with the beforeunload request in flight.
const GURL url2("http://www.yahoo.com");
controller().LoadURL(
- url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame();
EXPECT_TRUE(contents()->cross_navigation_pending());
EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
// Suppose the first navigation tries to commit now, with a
- // ViewMsg_Stop in flight. This should not cancel the pending navigation,
+ // FrameMsg_Stop in flight. This should not cancel the pending navigation,
// but it should act as if the beforeunload ack arrived.
orig_rfh->SendNavigate(1, GURL("chrome://blah"));
EXPECT_TRUE(contents()->cross_navigation_pending());
orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
// The pending navigation should be able to commit successfully.
- contents()->TestDidNavigate(pending_rfh, 1, url2, PAGE_TRANSITION_TYPED);
- EXPECT_FALSE(contents()->cross_navigation_pending());
- EXPECT_EQ(pending_rfh, contents()->GetMainFrame());
-}
-
-// Test that the original renderer cannot preempt a cross-site navigation once
-// the unload request has been made. At this point, the cross-site navigation
-// is almost ready to be displayed, and the original renderer is only given a
-// short chance to run an unload handler. Prevents regression of bug 23942.
-TEST_F(WebContentsImplTest, CrossSiteCantPreemptAfterUnload) {
- TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
- SiteInstance* instance1 = contents()->GetSiteInstance();
-
- // Navigate to URL. First URL should use first RenderViewHost.
- const GURL url("http://www.google.com");
- controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
- EXPECT_FALSE(contents()->cross_navigation_pending());
- EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
-
- // Navigate to new site, simulating an onbeforeunload approval.
- const GURL url2("http://www.yahoo.com");
- controller().LoadURL(
- url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- base::TimeTicks now = base::TimeTicks::Now();
- orig_rfh->OnMessageReceived(
- FrameHostMsg_BeforeUnload_ACK(0, true, now, now));
- EXPECT_TRUE(contents()->cross_navigation_pending());
- TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame();
-
- // Simulate the pending renderer's response, which leads to an unload request
- // being sent to orig_rfh.
- std::vector<GURL> url_chain;
- url_chain.push_back(GURL());
- contents()->GetRenderManagerForTesting()->OnCrossSiteResponse(
- contents()->GetRenderManagerForTesting()->pending_frame_host(),
- GlobalRequestID(0, 0), scoped_ptr<CrossSiteTransferringRequest>(),
- url_chain, Referrer(), PAGE_TRANSITION_TYPED, false);
-
- // Suppose the original renderer navigates now, while the unload request is in
- // flight. We should ignore it, wait for the unload ack, and let the pending
- // request continue. Otherwise, the contents may close spontaneously or stop
- // responding to navigation requests. (See bug 23942.)
- FrameHostMsg_DidCommitProvisionalLoad_Params params1a;
- InitNavigateParams(¶ms1a, 2, GURL("http://www.google.com/foo"),
- PAGE_TRANSITION_TYPED);
- orig_rfh->SendNavigate(2, GURL("http://www.google.com/foo"));
-
- // Verify that the pending navigation is still in progress.
- EXPECT_TRUE(contents()->cross_navigation_pending());
- EXPECT_TRUE(contents()->GetPendingMainFrame() != NULL);
-
- // DidNavigate from the pending page should commit it.
- contents()->TestDidNavigate(
- pending_rfh, 1, url2, PAGE_TRANSITION_TYPED);
- SiteInstance* instance2 = contents()->GetSiteInstance();
+ contents()->TestDidNavigate(pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(pending_rfh, contents()->GetMainFrame());
- EXPECT_NE(instance1, instance2);
- EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
}
// Test that a cross-site navigation that doesn't commit after the unload
// Navigate to URL. First URL should use original RenderFrameHost.
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
// Navigate to new site, simulating an onbeforeunload approval.
const GURL url2("http://www.yahoo.com");
- controller().LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ controller().LoadURL(
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
base::TimeTicks now = base::TimeTicks::Now();
orig_rfh->OnMessageReceived(
// Suppose the navigation doesn't get a chance to commit, and the user
// navigates in the current RFH's SiteInstance.
- controller().LoadURL(url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ controller().LoadURL(
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
// Verify that the pending navigation is cancelled and the renderer is no
// longer swapped out.
// Navigate to URL. There should be no committed entry yet.
const GURL url("http://www.google.com");
- controller().LoadURL(url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ controller().LoadURL(
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
NavigationEntry* entry = controller().GetLastCommittedEntry();
EXPECT_TRUE(entry == NULL);
// Committed entry should have page state after DidNavigate.
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
entry = controller().GetLastCommittedEntry();
EXPECT_TRUE(entry->GetPageState().IsValid());
// Navigate to same site.
const GURL url2("http://images.google.com");
- controller().LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ controller().LoadURL(
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
entry = controller().GetLastCommittedEntry();
EXPECT_TRUE(entry->GetPageState().IsValid());
// Committed entry should have page state after DidNavigate.
- contents()->TestDidNavigate(orig_rfh, 2, url2, PAGE_TRANSITION_TYPED);
+ contents()->TestDidNavigate(orig_rfh, 2, url2, ui::PAGE_TRANSITION_TYPED);
entry = controller().GetLastCommittedEntry();
EXPECT_TRUE(entry->GetPageState().IsValid());
// Now go back. Committed entry should still have page state.
controller().GoBack();
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
entry = controller().GetLastCommittedEntry();
EXPECT_TRUE(entry->GetPageState().IsValid());
}
// When opening a new window, it is navigated to about:blank internally.
// Currently, this results in two DidNavigate events.
const GURL url(url::kAboutBlankURL);
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
// Should have a page state here.
NavigationEntry* entry = controller().GetLastCommittedEntry();
// Navigating to a normal page should not cause a process swap.
const GURL new_url("http://www.google.com");
controller().LoadURL(new_url, Referrer(),
- PAGE_TRANSITION_TYPED, std::string());
+ ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
- contents()->TestDidNavigate(orig_rfh, 1, new_url, PAGE_TRANSITION_TYPED);
+ contents()->TestDidNavigate(orig_rfh, 1, new_url, ui::PAGE_TRANSITION_TYPED);
NavigationEntryImpl* entry_impl2 = NavigationEntryImpl::FromNavigationEntry(
controller().GetLastCommittedEntry());
EXPECT_EQ(site_instance_id, entry_impl2->site_instance()->GetId());
// Navigate to a site.
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
// Toggle fullscreen mode on (as if initiated via IPC from renderer).
// Navigate to a new site.
const GURL url2("http://www.yahoo.com");
controller().LoadURL(
- url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
TestRenderFrameHost* const pending_rfh = contents()->GetPendingMainFrame();
contents()->TestDidNavigate(
- pending_rfh, 1, url2, PAGE_TRANSITION_TYPED);
+ pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
// Confirm fullscreen has exited.
EXPECT_FALSE(orig_rvh->IsFullscreen());
// Navigate to a site.
const GURL url("http://www.google.com");
- controller().LoadURL(url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
- contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED);
+ controller().LoadURL(
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
+ contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
// Now, navigate to another page on the same site.
const GURL url2("http://www.google.com/search?q=kittens");
- controller().LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ controller().LoadURL(
+ url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_FALSE(contents()->cross_navigation_pending());
- contents()->TestDidNavigate(orig_rfh, 2, url2, PAGE_TRANSITION_TYPED);
+ contents()->TestDidNavigate(orig_rfh, 2, url2, ui::PAGE_TRANSITION_TYPED);
EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
// Sanity-check: Confirm we're not starting out in fullscreen mode.
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
contents()->TestDidNavigate(
- orig_rfh, i + 1, url, PAGE_TRANSITION_FORWARD_BACK);
+ orig_rfh, i + 1, url, ui::PAGE_TRANSITION_FORWARD_BACK);
// Confirm fullscreen has exited.
EXPECT_FALSE(orig_rvh->IsFullscreen());
// Navigate to a site.
const GURL url("http://www.google.com");
controller().LoadURL(
- url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
contents()->TestDidNavigate(
- contents()->GetMainFrame(), 1, url, PAGE_TRANSITION_TYPED);
+ contents()->GetMainFrame(), 1, url, ui::PAGE_TRANSITION_TYPED);
// Toggle fullscreen mode on (as if initiated via IPC from renderer).
EXPECT_FALSE(test_rvh()->IsFullscreen());
// Initiate a browser navigation that will trigger the interstitial
controller().LoadURL(GURL("http://www.evil.com"), Referrer(),
- PAGE_TRANSITION_TYPED, std::string());
+ ui::PAGE_TRANSITION_TYPED, std::string());
// Show an interstitial.
TestInterstitialPage::InterstitialState state =
// Initiate a browser navigation that will trigger the interstitial
controller().LoadURL(GURL("http://www.evil.com"), Referrer(),
- PAGE_TRANSITION_TYPED, std::string());
+ ui::PAGE_TRANSITION_TYPED, std::string());
// Show an interstitial.
TestInterstitialPage::InterstitialState state =
// Let's simulate a navigation initiated from the browser before the
// interstitial finishes loading.
const GURL url("http://www.google.com");
- controller().LoadURL(url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ controller().LoadURL(
+ url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
EXPECT_FALSE(interstitial->is_showing());
RunAllPendingInMessageLoop();
ASSERT_FALSE(deleted);
// Start a navigation to a page
contents()->GetController().LoadURL(
- kGURL, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
// Simulate that navigation triggering an interstitial.
TestInterstitialPage::InterstitialState state =
// Initiate a new navigation from the browser that also triggers an
// interstitial.
contents()->GetController().LoadURL(
- kGURL, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
TestInterstitialPage::InterstitialState state2 =
TestInterstitialPage::INVALID;
bool deleted2 = false;
// Start a navigation to a page
contents()->GetController().LoadURL(
- kGURL, Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
// DidNavigate from the page
contents()->TestDidNavigate(
- contents()->GetMainFrame(), 1, kGURL, PAGE_TRANSITION_TYPED);
+ contents()->GetMainFrame(), 1, kGURL, ui::PAGE_TRANSITION_TYPED);
// Simulate showing an interstitial while the page is showing.
TestInterstitialPage::InterstitialState state =
// Initiate a browser navigation that will trigger the interstitial
controller().LoadURL(GURL("http://www.evil.com"), Referrer(),
- PAGE_TRANSITION_TYPED, std::string());
+ ui::PAGE_TRANSITION_TYPED, std::string());
// Show an interstitial.
TestInterstitialPage::InterstitialState state =
EXPECT_EQ(0u, instance2->GetRelatedActiveContentsCount());
scoped_ptr<TestWebContents> contents1(
- TestWebContents::Create(browser_context(), instance1));
+ TestWebContents::Create(browser_context(), instance1.get()));
EXPECT_EQ(1u, instance1->GetRelatedActiveContentsCount());
EXPECT_EQ(1u, instance2->GetRelatedActiveContentsCount());
scoped_ptr<TestWebContents> contents2(
- TestWebContents::Create(browser_context(), instance1));
+ TestWebContents::Create(browser_context(), instance1.get()));
EXPECT_EQ(2u, instance1->GetRelatedActiveContentsCount());
EXPECT_EQ(2u, instance2->GetRelatedActiveContentsCount());
EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount());
scoped_ptr<TestWebContents> contents(
- TestWebContents::Create(browser_context(), instance));
+ TestWebContents::Create(browser_context(), instance.get()));
EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
// Navigate to a URL.
- contents->GetController().LoadURL(
- GURL("http://a.com/1"), Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ contents->GetController().LoadURL(GURL("http://a.com/1"),
+ Referrer(),
+ ui::PAGE_TRANSITION_TYPED,
+ std::string());
EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
contents->CommitPendingNavigation();
EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
// Navigate to a URL in the same site.
- contents->GetController().LoadURL(
- GURL("http://a.com/2"), Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ contents->GetController().LoadURL(GURL("http://a.com/2"),
+ Referrer(),
+ ui::PAGE_TRANSITION_TYPED,
+ std::string());
EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
contents->CommitPendingNavigation();
EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
// Navigate to a URL in a different site.
- contents->GetController().LoadURL(
- GURL("http://b.com"), Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ contents->GetController().LoadURL(GURL("http://b.com"),
+ Referrer(),
+ ui::PAGE_TRANSITION_TYPED,
+ std::string());
EXPECT_TRUE(contents->cross_navigation_pending());
EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
contents->CommitPendingNavigation();
EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount());
scoped_ptr<TestWebContents> contents(
- TestWebContents::Create(browser_context(), instance));
+ TestWebContents::Create(browser_context(), instance.get()));
EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
// Navigate to a URL.
EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
// Navigate to a URL with WebUI. This will change BrowsingInstances.
- contents->GetController().LoadURL(
- GURL(kTestWebUIUrl), Referrer(), PAGE_TRANSITION_TYPED, std::string());
+ contents->GetController().LoadURL(GURL(kTestWebUIUrl),
+ Referrer(),
+ ui::PAGE_TRANSITION_TYPED,
+ std::string());
EXPECT_TRUE(contents->cross_navigation_pending());
scoped_refptr<SiteInstance> instance_webui(
contents->GetPendingMainFrame()->GetSiteInstance());
EXPECT_EQ(0u, instance_webui->GetRelatedActiveContentsCount());
}
+// ChromeOS doesn't use WebContents based power save blocking.
+#if !defined(OS_CHROMEOS)
+TEST_F(WebContentsImplTest, MediaPowerSaveBlocking) {
+ // PlayerIDs are actually pointers cast to int64, so verify that both negative
+ // and positive player ids don't blow up.
+ const int kPlayerAudioVideoId = 15;
+ const int kPlayerAudioOnlyId = -15;
+ const int kPlayerVideoOnlyId = 30;
+
+ EXPECT_FALSE(contents()->has_audio_power_save_blocker_for_testing());
+ EXPECT_FALSE(contents()->has_video_power_save_blocker_for_testing());
+
+ TestRenderFrameHost* rfh = contents()->GetMainFrame();
+ AudioStreamMonitor* monitor = contents()->audio_stream_monitor();
+
+ // The audio power save blocker should not be based on having a media player
+ // when audio stream monitoring is available.
+ if (AudioStreamMonitor::monitoring_available()) {
+ // Send a fake audio stream monitor notification. The audio power save
+ // blocker should be created.
+ monitor->set_was_recently_audible_for_testing(true);
+ contents()->NotifyNavigationStateChanged(INVALIDATE_TYPE_TAB);
+ EXPECT_TRUE(contents()->has_audio_power_save_blocker_for_testing());
+
+ // Send another fake notification, this time when WasRecentlyAudible() will
+ // be false. The power save blocker should be released.
+ monitor->set_was_recently_audible_for_testing(false);
+ contents()->NotifyNavigationStateChanged(INVALIDATE_TYPE_TAB);
+ EXPECT_FALSE(contents()->has_audio_power_save_blocker_for_testing());
+ }
+
+ // Start a player with both audio and video. A video power save blocker
+ // should be created. If audio stream monitoring is available, an audio power
+ // save blocker should be created too.
+ rfh->OnMessageReceived(FrameHostMsg_MediaPlayingNotification(
+ 0, kPlayerAudioVideoId, true, true));
+ EXPECT_TRUE(contents()->has_video_power_save_blocker_for_testing());
+ EXPECT_EQ(contents()->has_audio_power_save_blocker_for_testing(),
+ !AudioStreamMonitor::monitoring_available());
+
+ // Upon hiding the video power save blocker should be released.
+ contents()->WasHidden();
+ EXPECT_FALSE(contents()->has_video_power_save_blocker_for_testing());
+
+ // Start another player that only has video. There should be no change in
+ // the power save blockers. The notification should take into account the
+ // visibility state of the WebContents.
+ rfh->OnMessageReceived(FrameHostMsg_MediaPlayingNotification(
+ 0, kPlayerVideoOnlyId, true, false));
+ EXPECT_FALSE(contents()->has_video_power_save_blocker_for_testing());
+ EXPECT_EQ(contents()->has_audio_power_save_blocker_for_testing(),
+ !AudioStreamMonitor::monitoring_available());
+
+ // Showing the WebContents should result in the creation of the blocker.
+ contents()->WasShown();
+ EXPECT_TRUE(contents()->has_video_power_save_blocker_for_testing());
+
+ // Start another player that only has audio. There should be no change in
+ // the power save blockers.
+ rfh->OnMessageReceived(FrameHostMsg_MediaPlayingNotification(
+ 0, kPlayerAudioOnlyId, false, true));
+ EXPECT_TRUE(contents()->has_video_power_save_blocker_for_testing());
+ EXPECT_EQ(contents()->has_audio_power_save_blocker_for_testing(),
+ !AudioStreamMonitor::monitoring_available());
+
+ // Destroy the original audio video player. Both power save blockers should
+ // remain.
+ rfh->OnMessageReceived(
+ FrameHostMsg_MediaPausedNotification(0, kPlayerAudioVideoId));
+ EXPECT_TRUE(contents()->has_video_power_save_blocker_for_testing());
+ EXPECT_EQ(contents()->has_audio_power_save_blocker_for_testing(),
+ !AudioStreamMonitor::monitoring_available());
+
+ // Destroy the audio only player. The video power save blocker should remain.
+ rfh->OnMessageReceived(
+ FrameHostMsg_MediaPausedNotification(0, kPlayerAudioOnlyId));
+ EXPECT_TRUE(contents()->has_video_power_save_blocker_for_testing());
+ EXPECT_FALSE(contents()->has_audio_power_save_blocker_for_testing());
+
+ // Destroy the video only player. No power save blockers should remain.
+ rfh->OnMessageReceived(
+ FrameHostMsg_MediaPausedNotification(0, kPlayerVideoOnlyId));
+ EXPECT_FALSE(contents()->has_video_power_save_blocker_for_testing());
+ EXPECT_FALSE(contents()->has_audio_power_save_blocker_for_testing());
+}
+#endif
+
} // namespace content