| Index: chrome/browser/ui/cocoa/location_bar/zoom_decoration_browsertest.mm | 
| diff --git a/chrome/browser/ui/cocoa/location_bar/zoom_decoration_browsertest.mm b/chrome/browser/ui/cocoa/location_bar/zoom_decoration_browsertest.mm | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..b4064277a2f050bad4265e043db457aba078dde9 | 
| --- /dev/null | 
| +++ b/chrome/browser/ui/cocoa/location_bar/zoom_decoration_browsertest.mm | 
| @@ -0,0 +1,116 @@ | 
| +// Copyright (c) 2013 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 "base/auto_reset.h" | 
| +#include "chrome/browser/chrome_page_zoom.h" | 
| +#include "chrome/browser/profiles/profile.h" | 
| +#include "chrome/browser/ui/browser_window.h" | 
| +#import "chrome/browser/ui/cocoa/browser_window_controller.h" | 
| +#import "chrome/browser/ui/cocoa/browser/zoom_bubble_controller.h" | 
| +#import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h" | 
| +#include "chrome/browser/ui/cocoa/location_bar/mock_toolbar_model.h" | 
| +#import "chrome/browser/ui/cocoa/location_bar/zoom_decoration.h" | 
| +#include "chrome/browser/ui/tabs/tab_strip_model.h" | 
| +#include "chrome/test/base/in_process_browser_test.h" | 
| +#include "content/public/browser/host_zoom_map.h" | 
| +#include "content/public/test/test_utils.h" | 
| + | 
| +class ZoomDecorationTest : public InProcessBrowserTest { | 
| + protected: | 
| +  ZoomDecorationTest() | 
| +      : InProcessBrowserTest(), | 
| +        old_toolbar_model_(NULL), | 
| +        should_quit_on_zoom_(false), | 
| +        zoom_callback_(base::Bind(&ZoomDecorationTest::OnZoomChanged, | 
| +                                  base::Unretained(this))) { | 
| +  } | 
| + | 
| +  virtual void SetUpOnMainThread() OVERRIDE { | 
| +    content::HostZoomMap::GetForBrowserContext( | 
| +        browser()->profile())->AddZoomLevelChangedCallback(zoom_callback_); | 
| + | 
| +    old_toolbar_model_ = GetLocationBar()->toolbar_model_; | 
| +    GetLocationBar()->toolbar_model_ = &mock_toolbar_model_; | 
| +  } | 
| + | 
| +  virtual void CleanUpOnMainThread() OVERRIDE { | 
| +    content::HostZoomMap::GetForBrowserContext( | 
| +        browser()->profile())->RemoveZoomLevelChangedCallback(zoom_callback_); | 
| +    GetLocationBar()->toolbar_model_ = old_toolbar_model_; | 
| +  } | 
| + | 
| +  LocationBarViewMac* GetLocationBar() const { | 
| +    BrowserWindowController* controller = | 
| +        [BrowserWindowController browserWindowControllerForWindow: | 
| +            browser()->window()->GetNativeWindow()]; | 
| +    return [controller locationBarBridge]; | 
| +  } | 
| + | 
| +  ZoomDecoration* GetZoomDecoration() const { | 
| +    return GetLocationBar()->zoom_decoration_.get(); | 
| +  } | 
| + | 
| +  ZoomBubbleController* GetBubble() const { | 
| +    return GetZoomDecoration()->bubble_; | 
| +  } | 
| + | 
| +  void Zoom(content::PageZoom zoom) { | 
| +    content::WebContents* web_contents = | 
| +        browser()->tab_strip_model()->GetActiveWebContents(); | 
| + | 
| +    base::AutoReset<bool> reset(&should_quit_on_zoom_, true); | 
| +    chrome_page_zoom::Zoom(web_contents, zoom); | 
| +    content::RunMessageLoop(); | 
| +  } | 
| + | 
| +  void OnZoomChanged(const std::string& host) { | 
| +    if (should_quit_on_zoom_) { | 
| +      MessageLoop::current()->PostTask(FROM_HERE, base::Bind( | 
| +          &MessageLoop::Quit, base::Unretained(MessageLoop::current()))); | 
| +    } | 
| +  } | 
| + | 
| +  MockToolbarModel mock_toolbar_model_; | 
| + | 
| + private: | 
| +  ToolbarModel* old_toolbar_model_; | 
| +  bool should_quit_on_zoom_; | 
| +  content::HostZoomMap::ZoomLevelChangedCallback zoom_callback_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(ZoomDecorationTest); | 
| +}; | 
| + | 
| +IN_PROC_BROWSER_TEST_F(ZoomDecorationTest, BubbleAtDefaultZoom) { | 
| +  ZoomDecoration* zoom_decoration = GetZoomDecoration(); | 
| + | 
| +  // Zoom in and reset. | 
| +  EXPECT_FALSE(zoom_decoration->IsVisible()); | 
| +  Zoom(content::PAGE_ZOOM_IN); | 
| +  EXPECT_TRUE(zoom_decoration->IsVisible()); | 
| +  Zoom(content::PAGE_ZOOM_RESET); | 
| +  EXPECT_FALSE(zoom_decoration->IsVisible()); | 
| + | 
| +  // Zoom in and show bubble then reset. | 
| +  Zoom(content::PAGE_ZOOM_IN); | 
| +  EXPECT_TRUE(zoom_decoration->IsVisible()); | 
| +  zoom_decoration->ShowBubble(false); | 
| +  Zoom(content::PAGE_ZOOM_RESET); | 
| +  EXPECT_TRUE(zoom_decoration->IsVisible()); | 
| + | 
| +  // Hide bubble and verify the decoration is hidden. | 
| +  [GetBubble() close]; | 
| +  EXPECT_FALSE(zoom_decoration->IsVisible()); | 
| +} | 
| + | 
| +IN_PROC_BROWSER_TEST_F(ZoomDecorationTest, HideOnInputProgress) { | 
| +  ZoomDecoration* zoom_decoration = GetZoomDecoration(); | 
| + | 
| +  // Zoom in and reset. | 
| +  Zoom(content::PAGE_ZOOM_IN); | 
| +  EXPECT_TRUE(zoom_decoration->IsVisible()); | 
| + | 
| +  mock_toolbar_model_.SetInputInProgress(true); | 
| +  GetLocationBar()->ZoomChangedForActiveTab(false); | 
| +  EXPECT_FALSE(zoom_decoration->IsVisible()); | 
| +} | 
|  |