1// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_UI_COCOA_FIND_BAR_FIND_BAR_BRIDGE_H_
6#define CHROME_BROWSER_UI_COCOA_FIND_BAR_FIND_BAR_BRIDGE_H_
7#pragma once
8
9#include "base/logging.h"
10#include "chrome/browser/ui/find_bar/find_bar.h"
11
12class FindBarController;
13
14// This class is included by find_bar_host_browsertest.cc, so it has to be
15// objc-free.
16#ifdef __OBJC__
17@class FindBarCocoaController;
18#else
19class FindBarCocoaController;
20#endif
21
22// Implementation of FindBar for the Mac.  This class simply passes
23// each message along to |cocoa_controller_|.
24//
25// The initialization here is a bit complicated.  FindBarBridge is
26// created by a static method in BrowserWindow.  The FindBarBridge
27// constructor creates a FindBarCocoaController, which in turn loads a
28// FindBarView from a nib file.  All of this is happening outside of
29// the main view hierarchy, so the static method also calls
30// BrowserWindowCocoa::AddFindBar() in order to add its FindBarView to
31// the cocoa views hierarchy.
32//
33// Memory ownership is relatively straightforward.  The FindBarBridge
34// object is owned by the Browser.  FindBarCocoaController is retained
35// by bother FindBarBridge and BrowserWindowController, since both use it.
36
37class FindBarBridge : public FindBar,
38                      public FindBarTesting {
39 public:
40  FindBarBridge();
41  virtual ~FindBarBridge();
42
43  FindBarCocoaController* find_bar_cocoa_controller() {
44    return cocoa_controller_;
45  }
46
47  virtual void SetFindBarController(FindBarController* find_bar_controller);
48
49  virtual FindBarController* GetFindBarController() const;
50
51  virtual FindBarTesting* GetFindBarTesting();
52
53  // Methods from FindBar.
54  virtual void Show(bool animate);
55  virtual void Hide(bool animate);
56  virtual void SetFocusAndSelection();
57  virtual void ClearResults(const FindNotificationDetails& results);
58  virtual void StopAnimation();
59  virtual void SetFindText(const string16& find_text);
60  virtual void UpdateUIForFindResult(const FindNotificationDetails& result,
61                                     const string16& find_text);
62  virtual void AudibleAlert();
63  virtual bool IsFindBarVisible();
64  virtual void RestoreSavedFocus();
65  virtual void MoveWindowIfNecessary(const gfx::Rect& selection_rect,
66                                     bool no_redraw);
67
68  // Methods from FindBarTesting.
69  virtual bool GetFindBarWindowInfo(gfx::Point* position,
70                                    bool* fully_visible);
71  virtual string16 GetFindText();
72  virtual string16 GetFindSelectedText();
73  virtual string16 GetMatchCountText();
74
75  // Used to disable find bar animations when testing.
76  static bool disable_animations_during_testing_;
77
78 private:
79  // Pointer to the cocoa controller which manages the cocoa view.  Is
80  // never nil.
81  FindBarCocoaController* cocoa_controller_;
82
83  // Pointer back to the owning controller.
84  FindBarController* find_bar_controller_;  // weak, owns us
85
86  DISALLOW_COPY_AND_ASSIGN(FindBarBridge);
87};
88
89#endif  // CHROME_BROWSER_UI_COCOA_FIND_BAR_FIND_BAR_BRIDGE_H_
90