blob: 72ca68f63e1cb242e10b6bc743332b46a494e39d [file] [log] [blame]
// Copyright 2015 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 "content/browser/host_zoom_map_impl.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/content_browser_test.h"
#include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h"
#include "net/dns/mock_host_resolver.h"
#include "url/gurl.h"
namespace content {
class HostZoomMapImplBrowserTest : public ContentBrowserTest {
protected:
void SetUpOnMainThread() override {
host_resolver()->AddRule("*", "127.0.0.1");
ASSERT_TRUE(embedded_test_server()->Start());
}
};
void RunTestForURL(const GURL& url,
Shell* shell,
double host_zoom_level,
double temp_zoom_level) {
WebContents* web_contents = shell->web_contents();
HostZoomMapImpl* host_zoom_map = static_cast<HostZoomMapImpl*>(
HostZoomMap::GetForWebContents(web_contents));
int view_id = web_contents->GetRenderViewHost()->GetRoutingID();
int process_id = web_contents->GetRenderViewHost()->GetProcess()->GetID();
// Assume caller has set the zoom level to |host_zoom_level| using
// either a host or host+scheme entry in the HostZoomMap prior to
// calling this function.
EXPECT_DOUBLE_EQ(host_zoom_level, host_zoom_map->GetZoomLevelForView(
url, process_id, view_id));
// Make sure that GetZoomLevelForView() works for temporary zoom levels.
host_zoom_map->SetTemporaryZoomLevel(process_id, view_id, temp_zoom_level);
EXPECT_DOUBLE_EQ(temp_zoom_level, host_zoom_map->GetZoomLevelForView(
url, process_id, view_id));
// Clear the temporary zoom level in case subsequent test calls use the same
// web_contents.
host_zoom_map->ClearTemporaryZoomLevel(process_id, view_id);
}
// Test to make sure that GetZoomForView() works properly for zoom levels
// stored by host value, and can distinguish temporary zoom levels from
// these.
IN_PROC_BROWSER_TEST_F(HostZoomMapImplBrowserTest, GetZoomForView_Host) {
GURL url(embedded_test_server()->GetURL("abc.com", "/title1.html"));
// We must navigate so the WebContents has a committed entry.
EXPECT_TRUE(NavigateToURL(shell(), url));
HostZoomMap* host_zoom_map =
HostZoomMap::GetForWebContents(shell()->web_contents());
double default_zoom_level = host_zoom_map->GetDefaultZoomLevel();
double host_zoom_level = default_zoom_level + 1.0;
double temp_zoom_level = default_zoom_level + 2.0;
host_zoom_map->SetZoomLevelForHost(url.host(), host_zoom_level);
RunTestForURL(url, shell(), host_zoom_level, temp_zoom_level);
}
// Test to make sure that GetZoomForView() works properly for zoom levels
// stored by host and scheme values, and can distinguish temporary zoom levels
// from these.
IN_PROC_BROWSER_TEST_F(HostZoomMapImplBrowserTest,
GetZoomForView_HostAndScheme) {
GURL url(embedded_test_server()->GetURL("abc.com", "/title1.html"));
// We must navigate so the WebContents has a committed entry.
EXPECT_TRUE(NavigateToURL(shell(), url));
HostZoomMap* host_zoom_map =
HostZoomMap::GetForWebContents(shell()->web_contents());
double default_zoom_level = host_zoom_map->GetDefaultZoomLevel();
double host_zoom_level = default_zoom_level + 1.0;
double temp_zoom_level = default_zoom_level + 2.0;
host_zoom_map->SetZoomLevelForHostAndScheme(url.scheme(), url.host(),
host_zoom_level);
RunTestForURL(url, shell(), host_zoom_level, temp_zoom_level);
}
} // namespace content