12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 59ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_finder.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/zoom/zoom_controller.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/zoom/zoom_observer.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/chrome_render_view_host_test_harness.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_profile.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/host_zoom_map.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/navigation_details.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/frame_navigate_params.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/test/test_renderer_host.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/test_utils.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool operator==(const ZoomController::ZoomChangedEventData& lhs, 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ZoomController::ZoomChangedEventData& rhs) { 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return lhs.web_contents == rhs.web_contents && 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lhs.old_zoom_level == rhs.old_zoom_level && 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lhs.new_zoom_level == rhs.new_zoom_level && 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lhs.zoom_mode == rhs.zoom_mode && 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lhs.can_show_bubble == rhs.can_show_bubble; 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TestZoomObserver : public ZoomObserver { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MOCK_METHOD1(OnZoomChanged, 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void(const ZoomController::ZoomChangedEventData&)); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ZoomControllerTest : public ChromeRenderViewHostTestHarness { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChromeRenderViewHostTestHarness::SetUp(); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) zoom_controller_.reset(new ZoomController(web_contents())); 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch zoom_controller_->AddObserver(&zoom_observer_); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // This call is needed so that the RenderViewHost reports being alive. This 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // is only important for tests that call ZoomController::SetZoomLevel(). 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RenderViewHostTester::For(rvh())->CreateRenderView( 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16(), MSG_ROUTING_NONE, MSG_ROUTING_NONE, -1, false); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE { 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch zoom_controller_->RemoveObserver(&zoom_observer_); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) zoom_controller_.reset(); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChromeRenderViewHostTestHarness::TearDown(); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ZoomController> zoom_controller_; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestZoomObserver zoom_observer_; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ZoomControllerTest, DidNavigateMainFrame) { 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch double zoom_level = zoom_controller_->GetZoomLevel(); 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ZoomController::ZoomChangedEventData zoom_change_data( 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_contents(), 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch zoom_level, 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch zoom_level, 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ZoomController::ZOOM_MODE_DEFAULT, 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch false); 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(zoom_observer_, OnZoomChanged(zoom_change_data)).Times(1); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) zoom_controller_->DidNavigateMainFrame(content::LoadCommittedDetails(), 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::FrameNavigateParams()); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ZoomControllerTest, Observe) { 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch double new_zoom_level = 110.0; 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // When the event is initiated from HostZoomMap, the old zoom level is not 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // available. 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ZoomController::ZoomChangedEventData zoom_change_data( 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_contents(), 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new_zoom_level, 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new_zoom_level, 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ZoomController::ZOOM_MODE_DEFAULT, 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch false); 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(zoom_observer_, OnZoomChanged(zoom_change_data)).Times(1); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::HostZoomMap* host_zoom_map = 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::HostZoomMap::GetDefaultForBrowserContext( 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents()->GetBrowserContext()); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch host_zoom_map->SetZoomLevelForHost(std::string(), new_zoom_level); 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 93116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(ZoomControllerTest, Observe_ZoomController) { 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch double old_zoom_level = zoom_controller_->GetZoomLevel(); 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch double new_zoom_level = 110.0; 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NavigateAndCommit(GURL("about:blank")); 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ZoomController::ZoomChangedEventData zoom_change_data1( 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_contents(), 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch old_zoom_level, 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch old_zoom_level, 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ZoomController::ZOOM_MODE_ISOLATED, 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci true /* can_show_bubble */); 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(zoom_observer_, OnZoomChanged(zoom_change_data1)).Times(1); 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch zoom_controller_->SetZoomMode(ZoomController::ZOOM_MODE_ISOLATED); 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ZoomController::ZoomChangedEventData zoom_change_data2( 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_contents(), 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch old_zoom_level, 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new_zoom_level, 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ZoomController::ZOOM_MODE_ISOLATED, 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci true /* can_show_bubble */); 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(zoom_observer_, OnZoomChanged(zoom_change_data2)).Times(1); 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch zoom_controller_->SetZoomLevel(new_zoom_level); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 119