Index: chrome/browser/instant/instant_client.h |
diff --git a/chrome/browser/instant/instant_client.h b/chrome/browser/instant/instant_client.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1c213ad7d06788aeba7d2e0ccc08db3f5fbf1e3f |
--- /dev/null |
+++ b/chrome/browser/instant/instant_client.h |
@@ -0,0 +1,132 @@ |
+// Copyright 2012 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. |
+ |
+#ifndef CHROME_BROWSER_INSTANT_INSTANT_CLIENT_H_ |
+#define CHROME_BROWSER_INSTANT_INSTANT_CLIENT_H_ |
+ |
+#include <vector> |
+ |
+#include "base/basictypes.h" |
+#include "base/compiler_specific.h" |
+#include "base/string16.h" |
+#include "chrome/common/instant_types.h" |
+#include "content/public/browser/web_contents_observer.h" |
+ |
+namespace chrome { |
+namespace search { |
+struct Mode; |
+} |
+} |
+ |
+namespace content { |
+class WebContents; |
+} |
+ |
+namespace gfx { |
+class Rect; |
+} |
+ |
+// InstantClient is used to exchange messages between its delegate and a page |
+// that supports the Instant API (http://dev.chromium.org/searchbox). |
+class InstantClient : public content::WebContentsObserver { |
+ public: |
+ // When InstantClient receives messages from the page, it calls the following |
+ // methods on its delegate. |
+ class Delegate { |
+ public: |
+ // Called when the page has suggestions. Usually in response to Change(), |
+ // SendAutocompleteResults() or UpOrDownKeyPressed(). |
+ virtual void SetSuggestions( |
+ const std::vector<InstantSuggestion>& suggestions) = 0; |
+ |
+ // Called upon determination of Instant API support. Usually in response to |
+ // SetContents() or when the page first finishes loading. |
+ virtual void InstantSupportDetermined(bool supports_instant) = 0; |
+ |
+ // Called when the page wants to be shown. Usually in response to Change(), |
+ // SendAutocompleteResults() or SearchModeChanged(). |
+ virtual void ShowInstantPreview(InstantShownReason reason, |
+ int height, |
+ InstantSizeUnits units) = 0; |
+ |
+ protected: |
+ virtual ~Delegate(); |
+ }; |
+ |
+ // Doesn't take ownership of |delegate|. |
+ explicit InstantClient(Delegate* delegate); |
+ virtual ~InstantClient(); |
+ |
+ // Sets |contents| as the page to communicate with. |contents| can be NULL, |
+ // which effectively stops all communication. |
+ void SetContents(content::WebContents* contents); |
+ |
+ // Tells the page that the user typed |text| into the omnibox. If |verbatim| |
+ // is false, the page predicts the query the user means to type and fetches |
+ // results for the prediction. If |verbatim| is true, |text| is taken as the |
+ // exact query (no prediction is made). |
+ void Update(const string16& text, |
+ size_t selection_start, |
+ size_t selection_end, |
+ bool verbatim); |
+ |
+ // Tells the page that the user pressed Enter in the omnibox. |
+ void Submit(const string16& text); |
+ |
+ // Tells the page that the user clicked on it. Nothing is being cancelled; the |
+ // poor choice of name merely reflects the IPC of the same (poor) name. |
+ void Cancel(const string16& text); |
+ |
+ // Tells the page the bounds of the omnibox dropdown (in screen coordinates). |
+ // This is used by the page to offset the results to avoid them being covered |
+ // by the omnibox dropdown. |
+ void SetOmniboxBounds(const gfx::Rect& bounds); |
+ |
+ // Tells the renderer to determine if the page supports the Instant API, which |
+ // results in a call to InstantSupportDetermined() when the reply is received. |
+ void DetermineIfPageSupportsInstant(); |
+ |
+ // Tells the page about the available autocomplete results. |
+ void SendAutocompleteResults( |
+ const std::vector<InstantAutocompleteResult>& results); |
+ |
+ // Tells the page that the user pressed Up or Down in the omnibox. |count| is |
+ // a repeat count, negative for moving up, positive for moving down. |
+ void UpOrDownKeyPressed(int count); |
+ |
+ // Tells the page that the active tab's search mode has changed. |
+ void SearchModeChanged(const chrome::search::Mode& mode); |
+ |
+ // Tells the page about the current theme background. |
+ void SendThemeBackgroundInfo(const ThemeBackgroundInfo& theme_info); |
+ |
+ // Tells the page about the current theme area height. |
+ void SendThemeAreaHeight(int height); |
+ |
+ // Tells the page whether it is allowed to display Instant results. |
+ void SetDisplayInstantResults(bool display_instant_results); |
+ |
+ private: |
+ // Overridden from content::WebContentsObserver: |
+ virtual void DidFinishLoad( |
+ int64 frame_id, |
+ const GURL& validated_url, |
+ bool is_main_frame, |
+ content::RenderViewHost* render_view_host) OVERRIDE; |
+ virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
+ |
+ void SetSuggestions(int page_id, |
+ const std::vector<InstantSuggestion>& suggestions); |
+ void InstantSupportDetermined(int page_id, bool result); |
+ void ShowInstantPreview(int page_id, |
+ InstantShownReason reason, |
+ int height, |
+ InstantSizeUnits units); |
+ |
+ Delegate* const delegate_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(InstantClient); |
+}; |
+ |
+#endif // CHROME_BROWSER_INSTANT_INSTANT_CLIENT_H_ |