| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_TAB_CONTENTS_MATCH_PREVIEW_H_ | 5 #ifndef CHROME_BROWSER_TAB_CONTENTS_MATCH_PREVIEW_H_ |
| 6 #define CHROME_BROWSER_TAB_CONTENTS_MATCH_PREVIEW_H_ | 6 #define CHROME_BROWSER_TAB_CONTENTS_MATCH_PREVIEW_H_ |
| 7 #pragma once |
| 7 | 8 |
| 8 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 9 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
| 11 #include "base/string16.h" |
| 12 #include "base/timer.h" |
| 13 #include "chrome/browser/search_engines/template_url_id.h" |
| 14 #include "chrome/common/page_transition_types.h" |
| 10 #include "googleurl/src/gurl.h" | 15 #include "googleurl/src/gurl.h" |
| 11 | 16 |
| 17 struct AutocompleteMatch; |
| 18 class MatchPreviewDelegate; |
| 12 class TabContents; | 19 class TabContents; |
| 13 | 20 |
| 14 // MatchPreview maintains a TabContents that is intended to give a preview of | 21 // MatchPreview maintains a TabContents that is intended to give a preview of |
| 15 // a URL. MatchPreview is owned by TabContents. | 22 // a URL. MatchPreview is owned by Browser. |
| 16 // | |
| 17 // As the user types in the omnibox the LocationBar updates MatchPreview by | |
| 18 // way of 'Update'. If the user does a gesture on the preview, say clicks a | |
| 19 // link, the TabContentsDelegate of the hosting TabContents is notified with | |
| 20 // CommitMatchPreview and the TabContents maintained by MatchPreview replaces | |
| 21 // the current TabContents in the TabStripModel. | |
| 22 // | 23 // |
| 23 // At any time the TabContents maintained by MatchPreview may be destroyed by | 24 // At any time the TabContents maintained by MatchPreview may be destroyed by |
| 24 // way of 'DestroyPreviewContents'. Consumers of MatchPreview can detect the | 25 // way of |DestroyPreviewContents|, which results in |HideMatchPreview| being |
| 25 // preview TabContents was destroyed by observing TAB_CONTENTS_DESTROYED. | 26 // invoked on the delegate. Similarly the preview may be committed at any time |
| 26 // | 27 // by invoking |CommitCurrentPreview|, which results in |CommitMatchPreview| |
| 27 // Consumers of MatchPreview can detect a new TabContents was created by | 28 // being invoked on the delegate. |
| 28 // MatchPreview by listening for MATCH_PREVIEW_TAB_CONTENTS_CREATED. | |
| 29 class MatchPreview { | 29 class MatchPreview { |
| 30 public: | 30 public: |
| 31 explicit MatchPreview(TabContents* host); | 31 explicit MatchPreview(MatchPreviewDelegate* delegate); |
| 32 ~MatchPreview(); | 32 ~MatchPreview(); |
| 33 | 33 |
| 34 // Is MatchPreview enabled? | 34 // Is MatchPreview enabled? |
| 35 static bool IsEnabled(); | 35 static bool IsEnabled(); |
| 36 | 36 |
| 37 // Invoked as the user types in the omnibox with the url to navigate to. If | 37 // Invoked as the user types in the omnibox with the url to navigate to. If |
| 38 // the url is empty and there is a preview TabContents it is destroyed. If url | 38 // the url is empty and there is a preview TabContents it is destroyed. If url |
| 39 // is non-empty and the preview TabContents has not been created it is | 39 // is non-empty and the preview TabContents has not been created it is |
| 40 // created. | 40 // created. |
| 41 void Update(const GURL& url); | 41 void Update(TabContents* tab_contents, |
| 42 const AutocompleteMatch& match, |
| 43 const string16& user_text, |
| 44 string16* suggested_text); |
| 42 | 45 |
| 43 // Destroys the preview TabContents. Does nothing if the preview TabContents | 46 // Destroys the preview TabContents. Does nothing if the preview TabContents |
| 44 // has not been created. | 47 // has not been created. |
| 45 void DestroyPreviewContents(); | 48 void DestroyPreviewContents(); |
| 46 | 49 |
| 47 // Invoked when the user does some gesture that should trigger making the | 50 // Invoked when the user does some gesture that should trigger making the |
| 48 // current previewed page the permanent page. | 51 // current previewed page the permanent page. |
| 49 void CommitCurrentPreview(); | 52 void CommitCurrentPreview(); |
| 50 | 53 |
| 51 // Releases the preview TabContents passing ownership to the caller. This is | 54 // Releases the preview TabContents passing ownership to the caller. This is |
| 52 // intended to be called when the preview TabContents is committed. | 55 // intended to be called when the preview TabContents is committed. This does |
| 53 TabContents* ReleasePreviewContents(); | 56 // not notify the delegate. |
| 57 TabContents* ReleasePreviewContents(bool commit_history); |
| 54 | 58 |
| 55 // The TabContents we're maintaining the preview for. | 59 // TabContents the match is being shown for. |
| 56 TabContents* host() { return host_; } | 60 TabContents* tab_contents() const { return tab_contents_; } |
| 57 | 61 |
| 58 // The preview TabContents; may be null. | 62 // The preview TabContents; may be null. |
| 59 TabContents* preview_contents() { return preview_contents_.get(); } | 63 TabContents* preview_contents() const { return preview_contents_.get(); } |
| 64 |
| 65 // Returns true if the preview TabContents is active. In some situations this |
| 66 // may return false yet preview_contents() returns non-NULL. |
| 67 bool is_active() const { return is_active_; } |
| 68 |
| 69 const GURL& url() const { return url_; } |
| 60 | 70 |
| 61 private: | 71 private: |
| 72 class FrameLoadObserver; |
| 73 class PaintObserverImpl; |
| 62 class TabContentsDelegateImpl; | 74 class TabContentsDelegateImpl; |
| 63 | 75 |
| 76 // Invoked when the page wants to update the suggested text. If |user_text_| |
| 77 // starts with |suggested_text|, then the delegate is notified of the change, |
| 78 // which results in updating the omnibox. |
| 79 void SetCompleteSuggestedText(const string16& suggested_text); |
| 80 |
| 81 // Invoked when the preview paints. This notifies the delegate the preview is |
| 82 // ready to be shown. |
| 83 void PreviewDidPaint(); |
| 84 |
| 85 // Invoked once the page has finished loading and the script has been sent. |
| 86 void PageFinishedLoading(); |
| 87 |
| 88 MatchPreviewDelegate* delegate_; |
| 89 |
| 90 // The TabContents last passed to |Update|. |
| 91 TabContents* tab_contents_; |
| 92 |
| 64 // The url we're displaying. | 93 // The url we're displaying. |
| 65 GURL url_; | 94 GURL url_; |
| 66 | 95 |
| 67 // The TabContents we're providing the preview for. | |
| 68 TabContents* host_; | |
| 69 | |
| 70 // Delegate of the preview TabContents. Used to detect when the user does some | 96 // Delegate of the preview TabContents. Used to detect when the user does some |
| 71 // gesture on the TabContents and the preview needs to be activated. | 97 // gesture on the TabContents and the preview needs to be activated. |
| 72 scoped_ptr<TabContentsDelegateImpl> delegate_; | 98 scoped_ptr<TabContentsDelegateImpl> preview_tab_contents_delegate_; |
| 73 | 99 |
| 74 // The preview TabContents; may be null. | 100 // The preview TabContents; may be null. |
| 75 scoped_ptr<TabContents> preview_contents_; | 101 scoped_ptr<TabContents> preview_contents_; |
| 76 | 102 |
| 103 // Has notification been sent out that the preview TabContents is ready to be |
| 104 // shown? |
| 105 bool is_active_; |
| 106 |
| 107 // The text the user typed in the omnibox. |
| 108 string16 user_text_; |
| 109 |
| 110 // The latest suggestion from the page. |
| 111 string16 complete_suggested_text_; |
| 112 |
| 113 // If we're showing instant results this is the ID of the TemplateURL driving |
| 114 // the results. A value of 0 means there is no TemplateURL. |
| 115 TemplateURLID template_url_id_; |
| 116 |
| 117 scoped_ptr<FrameLoadObserver> frame_load_observer_; |
| 118 |
| 77 DISALLOW_COPY_AND_ASSIGN(MatchPreview); | 119 DISALLOW_COPY_AND_ASSIGN(MatchPreview); |
| 78 }; | 120 }; |
| 79 | 121 |
| 80 #endif // CHROME_BROWSER_TAB_CONTENTS_MATCH_PREVIEW_H_ | 122 #endif // CHROME_BROWSER_TAB_CONTENTS_MATCH_PREVIEW_H_ |
| OLD | NEW |