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_
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"
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
{
30 // SearchIPCRouter calls its delegate in response to messages received from
34 // Called upon determination of Instant API support in response to the page
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
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 OnLogImpression(int position
,
67 const base::string16
& provider
) = 0;
69 // Called when the page wants to paste the |text| (or the clipboard contents
70 // if the |text| is empty) into the omnibox.
71 virtual void PasteIntoOmnibox(const base::string16
& text
) = 0;
73 // Called when the SearchBox wants to verify the signed-in Chrome identity
74 // against the provided |identity|. Will make a round-trip to the browser
75 // and eventually return the result through SendChromeIdentityCheckResult.
76 virtual void OnChromeIdentityCheck(const base::string16
& identity
) = 0;
79 // An interface to be implemented by consumers of SearchIPCRouter objects to
80 // decide whether to process the message received from the page, and vice
81 // versa (decide whether to send messages to the page).
86 // SearchIPCRouter calls these functions before sending/receiving messages
88 virtual bool ShouldProcessSetVoiceSearchSupport() = 0;
89 virtual bool ShouldProcessFocusOmnibox(bool is_active_tab
) = 0;
90 virtual bool ShouldProcessNavigateToURL(bool is_active_tab
) = 0;
91 virtual bool ShouldProcessDeleteMostVisitedItem() = 0;
92 virtual bool ShouldProcessUndoMostVisitedDeletion() = 0;
93 virtual bool ShouldProcessUndoAllMostVisitedDeletions() = 0;
94 virtual bool ShouldProcessLogEvent() = 0;
95 virtual bool ShouldProcessPasteIntoOmnibox(bool is_active_tab
) = 0;
96 virtual bool ShouldProcessChromeIdentityCheck() = 0;
97 virtual bool ShouldSendSetPromoInformation() = 0;
98 virtual bool ShouldSendSetDisplayInstantResults() = 0;
99 virtual bool ShouldSendSetSuggestionToPrefetch() = 0;
100 virtual bool ShouldSendMostVisitedItems() = 0;
101 virtual bool ShouldSendThemeBackgroundInfo() = 0;
102 virtual bool ShouldSendToggleVoiceSearch() = 0;
103 virtual bool ShouldSubmitQuery() = 0;
106 SearchIPCRouter(content::WebContents
* web_contents
, Delegate
* delegate
,
107 scoped_ptr
<Policy
> policy
);
108 virtual ~SearchIPCRouter();
110 // Tells the renderer to determine if the page supports the Instant API, which
111 // results in a call to OnInstantSupportDetermined() when the reply is
113 void DetermineIfPageSupportsInstant();
115 // Tells the renderer about the result of the Chrome identity check.
116 void SendChromeIdentityCheckResult(const base::string16
& identity
,
117 bool identity_match
);
119 // Tells the renderer information it needs to display promos.
120 void SetPromoInformation(bool is_app_launcher_enabled
);
122 // Tells the renderer whether to display the Instant results.
123 void SetDisplayInstantResults();
125 // Tells the page the suggestion to be prefetched if any.
126 void SetSuggestionToPrefetch(const InstantSuggestion
& suggestion
);
128 // Tells the renderer about the most visited items.
129 void SendMostVisitedItems(const std::vector
<InstantMostVisitedItem
>& items
);
131 // Tells the renderer about the current theme background.
132 void SendThemeBackgroundInfo(const ThemeBackgroundInfo
& theme_info
);
134 // Tells the page to toggle voice search.
135 void ToggleVoiceSearch();
137 // Tells the page that the user pressed Enter in the omnibox.
138 void Submit(const base::string16
& text
);
140 // Called when the tab corresponding to |this| instance is activated.
141 void OnTabActivated();
143 // Called when the tab corresponding to |this| instance is deactivated.
144 void OnTabDeactivated();
147 friend class SearchIPCRouterPolicyTest
;
148 friend class SearchIPCRouterTest
;
149 FRIEND_TEST_ALL_PREFIXES(SearchTabHelperTest
,
150 DetermineIfPageSupportsInstant_Local
);
151 FRIEND_TEST_ALL_PREFIXES(SearchTabHelperTest
,
152 DetermineIfPageSupportsInstant_NonLocal
);
153 FRIEND_TEST_ALL_PREFIXES(SearchTabHelperTest
,
154 PageURLDoesntBelongToInstantRenderer
);
155 FRIEND_TEST_ALL_PREFIXES(SearchIPCRouterTest
,
156 IgnoreMessageIfThePageIsNotActive
);
157 FRIEND_TEST_ALL_PREFIXES(SearchIPCRouterTest
,
158 DoNotSendSetDisplayInstantResultsMsg
);
159 FRIEND_TEST_ALL_PREFIXES(SearchIPCRouterTest
, HandleTabChangedEvents
);
161 // Overridden from contents::WebContentsObserver:
162 virtual bool OnMessageReceived(const IPC::Message
& message
) OVERRIDE
;
164 void OnInstantSupportDetermined(int page_id
, bool supports_instant
) const;
165 void OnVoiceSearchSupportDetermined(int page_id
,
166 bool supports_voice_search
) const;
167 void OnFocusOmnibox(int page_id
, OmniboxFocusState state
) const;
168 void OnSearchBoxNavigate(int page_id
,
170 WindowOpenDisposition disposition
,
171 bool is_most_visited_item_url
) const;
172 void OnDeleteMostVisitedItem(int page_id
, const GURL
& url
) const;
173 void OnUndoMostVisitedDeletion(int page_id
, const GURL
& url
) const;
174 void OnUndoAllMostVisitedDeletions(int page_id
) const;
175 void OnLogEvent(int page_id
, NTPLoggingEventType event
) const;
176 void OnLogImpression(int page_id
,
178 const base::string16
& provider
) const;
179 void OnPasteAndOpenDropDown(int page_id
, const base::string16
& text
) const;
180 void OnChromeIdentityCheck(int page_id
, const base::string16
& identity
) const;
182 // Used by unit tests to set a fake delegate.
183 void set_delegate(Delegate
* delegate
);
185 // Used by unit tests.
186 void set_policy(scoped_ptr
<Policy
> policy
);
188 // Used by unit tests.
189 Policy
* policy() const { return policy_
.get(); }
192 scoped_ptr
<Policy
> policy_
;
194 // Set to true, when the tab corresponding to |this| instance is active.
197 DISALLOW_COPY_AND_ASSIGN(SearchIPCRouter
);
200 #endif // CHROME_BROWSER_UI_SEARCH_SEARCH_IPC_ROUTER_H_