Temporarily re-enabling SizeAfterPrefChange test with traces (this time for Linux...
[chromium-blink-merge.git] / chrome / browser / ui / search / search_ipc_router.h
blob03ef3d2bd5f76e900e9f93dbf1cda3fdf5a316cf
1 // Copyright 2013 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.
5 #ifndef CHROME_BROWSER_UI_SEARCH_SEARCH_IPC_ROUTER_H_
6 #define CHROME_BROWSER_UI_SEARCH_SEARCH_IPC_ROUTER_H_
8 #include <vector>
10 #include "base/gtest_prod_util.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "chrome/common/instant_types.h"
13 #include "chrome/common/ntp_logging_events.h"
14 #include "chrome/common/omnibox_focus_state.h"
15 #include "content/public/browser/web_contents_observer.h"
16 #include "ui/base/window_open_disposition.h"
18 class GURL;
20 namespace content {
21 class WebContents;
24 class SearchIPCRouterTest;
26 // SearchIPCRouter is responsible for receiving and sending IPC messages between
27 // the browser and the Instant page.
28 class SearchIPCRouter : public content::WebContentsObserver {
29 public:
30 // SearchIPCRouter calls its delegate in response to messages received from
31 // the page.
32 class Delegate {
33 public:
34 // Called upon determination of Instant API support in response to the page
35 // load event.
36 virtual void OnInstantSupportDetermined(bool supports_instant) = 0;
38 // Called upon determination of voice search API support.
39 virtual void OnSetVoiceSearchSupport(bool supports_voice_search) = 0;
41 // Called when the page wants the omnibox to be focused. |state| specifies
42 // the omnibox focus state.
43 virtual void FocusOmnibox(OmniboxFocusState state) = 0;
45 // Called when the page wants to navigate to |url|. Usually used by the
46 // page to navigate to privileged destinations (e.g. chrome:// URLs) or to
47 // navigate to URLs that are hidden from the page using Restricted IDs (rid
48 // in the API).
49 virtual void NavigateToURL(const GURL& url,
50 WindowOpenDisposition disposition,
51 bool is_most_visited_item_url) = 0;
53 // Called when the SearchBox wants to delete a Most Visited item.
54 virtual void OnDeleteMostVisitedItem(const GURL& url) = 0;
56 // Called when the SearchBox wants to undo a Most Visited deletion.
57 virtual void OnUndoMostVisitedDeletion(const GURL& url) = 0;
59 // Called when the SearchBox wants to undo all Most Visited deletions.
60 virtual void OnUndoAllMostVisitedDeletions() = 0;
62 // Called to signal that an event has occurred on the New Tab Page.
63 virtual void OnLogEvent(NTPLoggingEventType event) = 0;
65 // Called to log an impression from a given provider on the New Tab Page.
66 virtual void OnLogMostVisitedImpression(int position,
67 const base::string16& provider) = 0;
69 // Called to log a navigation from a given provider on the New Tab Page.
70 virtual void OnLogMostVisitedNavigation(int position,
71 const base::string16& provider) = 0;
73 // Called when the page wants to paste the |text| (or the clipboard contents
74 // if the |text| is empty) into the omnibox.
75 virtual void PasteIntoOmnibox(const base::string16& text) = 0;
77 // Called when the SearchBox wants to verify the signed-in Chrome identity
78 // against the provided |identity|. Will make a round-trip to the browser
79 // and eventually return the result through SendChromeIdentityCheckResult.
80 virtual void OnChromeIdentityCheck(const base::string16& identity) = 0;
83 // An interface to be implemented by consumers of SearchIPCRouter objects to
84 // decide whether to process the message received from the page, and vice
85 // versa (decide whether to send messages to the page).
86 class Policy {
87 public:
88 virtual ~Policy() {}
90 // SearchIPCRouter calls these functions before sending/receiving messages
91 // to/from the page.
92 virtual bool ShouldProcessSetVoiceSearchSupport() = 0;
93 virtual bool ShouldProcessFocusOmnibox(bool is_active_tab) = 0;
94 virtual bool ShouldProcessNavigateToURL(bool is_active_tab) = 0;
95 virtual bool ShouldProcessDeleteMostVisitedItem() = 0;
96 virtual bool ShouldProcessUndoMostVisitedDeletion() = 0;
97 virtual bool ShouldProcessUndoAllMostVisitedDeletions() = 0;
98 virtual bool ShouldProcessLogEvent() = 0;
99 virtual bool ShouldProcessPasteIntoOmnibox(bool is_active_tab) = 0;
100 virtual bool ShouldProcessChromeIdentityCheck() = 0;
101 virtual bool ShouldSendSetPromoInformation() = 0;
102 virtual bool ShouldSendSetDisplayInstantResults() = 0;
103 virtual bool ShouldSendSetSuggestionToPrefetch() = 0;
104 virtual bool ShouldSendSetOmniboxStartMargin() = 0;
105 virtual bool ShouldSendSetInputInProgress(bool is_active_tab) = 0;
106 virtual bool ShouldSendOmniboxFocusChanged() = 0;
107 virtual bool ShouldSendMostVisitedItems() = 0;
108 virtual bool ShouldSendThemeBackgroundInfo() = 0;
109 virtual bool ShouldSendToggleVoiceSearch() = 0;
110 virtual bool ShouldSubmitQuery() = 0;
113 SearchIPCRouter(content::WebContents* web_contents, Delegate* delegate,
114 scoped_ptr<Policy> policy);
115 virtual ~SearchIPCRouter();
117 // Tells the SearchIPCRouter that a new page in an Instant process committed.
118 void OnNavigationEntryCommitted();
120 // Tells the renderer to determine if the page supports the Instant API, which
121 // results in a call to OnInstantSupportDetermined() when the reply is
122 // received.
123 void DetermineIfPageSupportsInstant();
125 // Tells the renderer about the result of the Chrome identity check.
126 void SendChromeIdentityCheckResult(const base::string16& identity,
127 bool identity_match);
129 // Tells the renderer information it needs to display promos.
130 void SetPromoInformation(bool is_app_launcher_enabled);
132 // Tells the renderer whether to display the Instant results.
133 void SetDisplayInstantResults();
135 // Tells the page the suggestion to be prefetched if any.
136 void SetSuggestionToPrefetch(const InstantSuggestion& suggestion);
138 // Tells the page the left margin of the omnibox. This is used by the page to
139 // align text or assets properly with the omnibox.
140 void SetOmniboxStartMargin(int start_margin);
142 // Tells the page that user input started or stopped.
143 void SetInputInProgress(bool input_in_progress);
145 // Tells the page that the omnibox focus has changed.
146 void OmniboxFocusChanged(OmniboxFocusState state,
147 OmniboxFocusChangeReason reason);
149 // Tells the renderer about the most visited items.
150 void SendMostVisitedItems(const std::vector<InstantMostVisitedItem>& items);
152 // Tells the renderer about the current theme background.
153 void SendThemeBackgroundInfo(const ThemeBackgroundInfo& theme_info);
155 // Tells the page to toggle voice search.
156 void ToggleVoiceSearch();
158 // Tells the page that the user pressed Enter in the omnibox.
159 void Submit(const base::string16& text);
161 // Called when the tab corresponding to |this| instance is activated.
162 void OnTabActivated();
164 // Called when the tab corresponding to |this| instance is deactivated.
165 void OnTabDeactivated();
167 private:
168 friend class SearchIPCRouterPolicyTest;
169 friend class SearchIPCRouterTest;
170 FRIEND_TEST_ALL_PREFIXES(SearchTabHelperTest,
171 DetermineIfPageSupportsInstant_Local);
172 FRIEND_TEST_ALL_PREFIXES(SearchTabHelperTest,
173 DetermineIfPageSupportsInstant_NonLocal);
174 FRIEND_TEST_ALL_PREFIXES(SearchTabHelperTest,
175 PageURLDoesntBelongToInstantRenderer);
176 FRIEND_TEST_ALL_PREFIXES(SearchIPCRouterTest,
177 IgnoreMessageIfThePageIsNotActive);
178 FRIEND_TEST_ALL_PREFIXES(SearchIPCRouterTest,
179 DoNotSendSetDisplayInstantResultsMsg);
180 FRIEND_TEST_ALL_PREFIXES(SearchIPCRouterTest, HandleTabChangedEvents);
182 // Overridden from contents::WebContentsObserver:
183 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
185 void OnInstantSupportDetermined(int page_seq_no, bool supports_instant) const;
186 void OnVoiceSearchSupportDetermined(int page_id,
187 bool supports_voice_search) const;
188 void OnFocusOmnibox(int page_id, OmniboxFocusState state) const;
189 void OnSearchBoxNavigate(int page_id,
190 const GURL& url,
191 WindowOpenDisposition disposition,
192 bool is_most_visited_item_url) const;
193 void OnDeleteMostVisitedItem(int page_seq_no, const GURL& url) const;
194 void OnUndoMostVisitedDeletion(int page_seq_no, const GURL& url) const;
195 void OnUndoAllMostVisitedDeletions(int page_seq_no) const;
196 void OnLogEvent(int page_seq_no, NTPLoggingEventType event) const;
197 void OnLogMostVisitedImpression(int page_seq_no,
198 int position,
199 const base::string16& provider) const;
200 void OnLogMostVisitedNavigation(int page_seq_no,
201 int position,
202 const base::string16& provider) const;
203 void OnPasteAndOpenDropDown(int page_seq_no,
204 const base::string16& text) const;
205 void OnChromeIdentityCheck(int page_seq_no,
206 const base::string16& identity) const;
208 // Used by unit tests to set a fake delegate.
209 void set_delegate_for_testing(Delegate* delegate);
211 // Used by unit tests.
212 void set_policy_for_testing(scoped_ptr<Policy> policy);
214 // Used by unit tests.
215 Policy* policy_for_testing() const { return policy_.get(); }
217 // Used by unit tests.
218 int page_seq_no_for_testing() const { return commit_counter_; }
220 Delegate* delegate_;
221 scoped_ptr<Policy> policy_;
223 // Holds the number of main frame commits executed in this tab. Used by the
224 // SearchIPCRouter to ensure that delayed IPC replies are ignored.
225 int commit_counter_;
227 // Set to true, when the tab corresponding to |this| instance is active.
228 bool is_active_tab_;
230 DISALLOW_COPY_AND_ASSIGN(SearchIPCRouter);
233 #endif // CHROME_BROWSER_UI_SEARCH_SEARCH_IPC_ROUTER_H_