diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-22 19:22:57 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-22 19:22:57 +0000 |
commit | fdd61c60136a6d3cf351003802b513a950c91029 (patch) | |
tree | 05c3deb16c5b2e8640cf97ef8c9fe79c144137e3 /chrome/browser | |
parent | 070fd95297d8d8eb7076ea8ba0956dee74d0e4f9 (diff) | |
download | chromium_src-fdd61c60136a6d3cf351003802b513a950c91029.zip chromium_src-fdd61c60136a6d3cf351003802b513a950c91029.tar.gz chromium_src-fdd61c60136a6d3cf351003802b513a950c91029.tar.bz2 |
Move all data members from WebContents to TabContents in preparation for
merging the two. This is extremely straightforward except for the
GearsCreateShortcutCallbackFunctor which I had to move to the header (with a
TODO and its associated function OnGearsCreateShortcutDone) and some of the
constructors for the members which took a WebContents that I had to cast.
I tried to reorganize the data to have some kind of groupings.
I made the member initializers all explicit for TabContents because the
extreme number of them makes them difficult to keep track of.
Review URL: http://codereview.chromium.org/88021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14230 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/tab_contents/tab_contents.cc | 73 | ||||
-rw-r--r-- | chrome/browser/tab_contents/tab_contents.h | 227 | ||||
-rw-r--r-- | chrome/browser/tab_contents/web_contents.cc | 57 | ||||
-rw-r--r-- | chrome/browser/tab_contents/web_contents.h | 162 |
4 files changed, 287 insertions, 232 deletions
diff --git a/chrome/browser/tab_contents/tab_contents.cc b/chrome/browser/tab_contents/tab_contents.cc index c084afa..252e2b2 100644 --- a/chrome/browser/tab_contents/tab_contents.cc +++ b/chrome/browser/tab_contents/tab_contents.cc @@ -4,11 +4,15 @@ #include "chrome/browser/tab_contents/tab_contents.h" +#include "chrome/browser/autofill_manager.h" #include "chrome/browser/cert_store.h" #include "chrome/browser/download/download_item_model.h" #include "chrome/browser/download/download_shelf.h" +#include "chrome/browser/password_manager/password_manager.h" +#include "chrome/browser/plugin_installer.h" #include "chrome/browser/tab_contents/navigation_entry.h" #include "chrome/browser/tab_contents/tab_contents_delegate.h" +#include "chrome/browser/tab_contents/tab_contents_view.h" #include "chrome/browser/tab_contents/web_contents.h" #include "chrome/common/l10n_util.h" #include "chrome/common/notification_service.h" @@ -24,17 +28,62 @@ #include "chrome/views/controls/scrollbar/native_scroll_bar.h" #endif +// static +int TabContents::find_request_id_counter_ = -1; + +// TODO(brettw) many of the data members here have casts to WebContents. +// This object is the same as WebContents and is currently being merged. +// When this merge is done, the casts can be removed. TabContents::TabContents(Profile* profile) : delegate_(NULL), controller_(this, profile), + view_(TabContentsView::Create(static_cast<WebContents*>(this))), + ALLOW_THIS_IN_INITIALIZER_LIST(render_manager_( + static_cast<WebContents*>(this), + static_cast<WebContents*>(this))), + property_bag_(), + registrar_(), + printing_(*static_cast<WebContents*>(this)), + save_package_(), + cancelable_consumer_(), + autofill_manager_(), + password_manager_(), + plugin_installer_(), + ALLOW_THIS_IN_INITIALIZER_LIST(fav_icon_helper_( + static_cast<WebContents*>(this))), + select_file_dialog_(), + pending_install_(), is_loading_(false), is_crashed_(false), waiting_for_response_(false), - shelf_visible_(false), max_page_id_(-1), - capturing_contents_(false), + current_load_start_(), + load_state_(net::LOAD_STATE_IDLE), + load_state_host_(), + received_page_title_(false), + is_starred_(false), + contents_mime_type_(), + encoding_(), + download_shelf_(), + shelf_visible_(false), blocked_popups_(NULL), - is_being_destroyed_(false) { + infobar_delegates_(), + last_download_shelf_show_(), + find_ui_active_(false), + find_op_aborted_(false), + current_find_request_id_(find_request_id_counter_++), + find_text_(), + find_prepopulate_text_(NULL), + find_result_(), + capturing_contents_(false), + is_being_destroyed_(false), + notify_disconnection_(false), + history_requests_(), +#if defined(OS_WIN) + message_box_active_(CreateEvent(NULL, TRUE, FALSE, NULL)), +#endif + last_javascript_message_dismissal_(), + suppress_javascript_messages_(false) { } TabContents::~TabContents() { @@ -394,3 +443,21 @@ void TabContents::ExpireInfoBars( RemoveInfoBar(delegate); } } + +void TabContents::OnGearsCreateShortcutDone( + const GearsShortcutData2& shortcut_data, bool success) { + NavigationEntry* current_entry = controller_.GetLastCommittedEntry(); + bool same_page = + current_entry && pending_install_.page_id == current_entry->page_id(); + + if (success && same_page) { + // Only switch to app mode if the user chose to create a shortcut and + // we're still on the same page that it corresponded to. + if (delegate()) + delegate()->ConvertContentsToApplication(this); + } + + // Reset the page id to indicate no requests are pending. + pending_install_.page_id = 0; + pending_install_.callback_functor = NULL; +} diff --git a/chrome/browser/tab_contents/tab_contents.h b/chrome/browser/tab_contents/tab_contents.h index aa636f3..a7d5833 100644 --- a/chrome/browser/tab_contents/tab_contents.h +++ b/chrome/browser/tab_contents/tab_contents.h @@ -10,17 +10,37 @@ #include <string> #include <vector> +#include "base/basictypes.h" #include "base/gfx/native_widget_types.h" #include "base/gfx/rect.h" #include "base/scoped_ptr.h" #include "chrome/browser/autocomplete/autocomplete_edit.h" +#include "chrome/browser/cancelable_request.h" +#include "chrome/browser/download/save_package.h" +#include "chrome/browser/fav_icon_helper.h" +#include "chrome/browser/find_notification_details.h" +#include "chrome/browser/shell_dialogs.h" +#include "chrome/browser/renderer_host/render_view_host_delegate.h" #include "chrome/browser/tab_contents/constrained_window.h" #include "chrome/browser/tab_contents/infobar_delegate.h" #include "chrome/browser/tab_contents/navigation_controller.h" #include "chrome/browser/tab_contents/page_navigator.h" +#include "chrome/browser/tab_contents/render_view_host_manager.h" +#include "chrome/common/gears_api.h" #include "chrome/common/navigation_types.h" #include "chrome/common/notification_registrar.h" #include "chrome/common/property_bag.h" +#include "net/base/load_states.h" +#include "webkit/glue/password_form.h" +#include "webkit/glue/webpreferences.h" + + +#if defined(OS_MACOSX) || defined(OS_LINUX) +// Remove when we've finished porting the supporting classes. +#include "chrome/common/temp_scaffolding_stubs.h" +#elif defined(OS_WIN) +#include "chrome/browser/printing/print_view_manager.h" +#endif namespace gfx { class Rect; @@ -31,17 +51,21 @@ class RootView; class WindowDelegate; } +class AutofillManager; class BlockedPopupContainer; class DOMUIContents; class DownloadItem; class DownloadShelf; class InfoBarView; class LoadNotificationDetails; +class PasswordManager; +class PluginInstaller; class Profile; class TabContentsDelegate; class TabContentsFactory; class SkBitmap; class SiteInstance; +class TabContentsView; class WebContents; // Describes what goes in the main content area of a tab. WebContents is @@ -348,6 +372,43 @@ class TabContents : public PageNavigator, // automation purposes. friend class AutomationProvider; + // When CreateShortcut is invoked RenderViewHost::GetApplicationInfo is + // invoked. CreateShortcut caches the state of the page needed to create the + // shortcut in PendingInstall. When OnDidGetApplicationInfo is invoked, it + // uses the information from PendingInstall and the WebApplicationInfo + // to create the shortcut. + class GearsCreateShortcutCallbackFunctor; + struct PendingInstall { + int32 page_id; + SkBitmap icon; + std::wstring title; + GURL url; + // This object receives the GearsCreateShortcutCallback and routes the + // message back to the WebContents, if we haven't been deleted. + GearsCreateShortcutCallbackFunctor* callback_functor; + }; + + // TODO(brettw) move thos to tab_contents.cc once WebContents and + // TabContents are merged. + class GearsCreateShortcutCallbackFunctor { + public: + explicit GearsCreateShortcutCallbackFunctor(TabContents* contents) + : contents_(contents) {} + + void Run(const GearsShortcutData2& shortcut_data, bool success) { + if (contents_) + contents_->OnGearsCreateShortcutDone(shortcut_data, success); + delete this; + } + void Cancel() { + contents_ = NULL; + } + + private: + TabContents* contents_; + }; + + TabContents(Profile* profile); // Changes the IsLoading state and notifies delegate as needed @@ -383,48 +444,192 @@ class TabContents : public PageNavigator, void ExpireInfoBars( const NavigationController::LoadCommittedDetails& details); - // Data ---------------------------------------------------------------------- + // Called when the user dismisses the shortcut creation dialog. 'success' is + // true if the shortcut was created. + void OnGearsCreateShortcutDone(const GearsShortcutData2& shortcut_data, + bool success); + + // Data for core operation --------------------------------------------------- + // Delegate for notifying our owner about stuff. Not owned by us. TabContentsDelegate* delegate_; + + // Handles the back/forward list and loading. NavigationController controller_; + // The corresponding view. + scoped_ptr<TabContentsView> view_; + + // Helper classes ------------------------------------------------------------ + + // Manages creation and swapping of render views. + RenderViewHostManager render_manager_; + + // Stores random bits of data for others to associate with this object. PropertyBag property_bag_; + // Registers and unregisters us for notifications. NotificationRegistrar registrar_; + // Handles print preview and print job for this contents. + printing::PrintViewManager printing_; + + // SavePackage, lazily created. + scoped_refptr<SavePackage> save_package_; + + // Tracks our pending CancelableRequests. This maps pending requests to + // page IDs so that we know whether a given callback still applies. The + // page ID -1 means no page ID was set. + CancelableRequestConsumerT<int32, -1> cancelable_consumer_; + + // AutofillManager, lazily created. + scoped_ptr<AutofillManager> autofill_manager_; + + // PasswordManager, lazily created. + scoped_ptr<PasswordManager> password_manager_; + + // PluginInstaller, lazily created. + scoped_ptr<PluginInstaller> plugin_installer_; + + // Handles downloading favicons. + FavIconHelper fav_icon_helper_; + + // Dialog box used for choosing files to upload from file form fields. + scoped_refptr<SelectFileDialog> select_file_dialog_; + + // Web app installation. + PendingInstall pending_install_; + + // Data for loading state ---------------------------------------------------- + // Indicates whether we're currently loading a resource. bool is_loading_; - bool is_crashed_; // true if the tab is considered crashed. + // Indicates if the tab is considered crashed. + bool is_crashed_; // See waiting_for_response() above. bool waiting_for_response_; - // The download shelf view (view at the bottom of the page). - scoped_ptr<DownloadShelf> download_shelf_; - - // Whether the shelf view is visible. - bool shelf_visible_; - // Indicates the largest PageID we've seen. This field is ignored if we are // a WebContents, in which case the max page ID is stored separately with // each SiteInstance. + // TODO(brettw) this seems like it can be removed according to the comment. int32 max_page_id_; - // See capturing_contents() above. - bool capturing_contents_; + // System time at which the current load was started. + base::TimeTicks current_load_start_; + + // The current load state and the URL associated with it. + net::LoadState load_state_; + std::wstring load_state_host_; + + // Data for current page ----------------------------------------------------- + + // Whether we have a (non-empty) title for the current page. + // Used to prevent subsequent title updates from affecting history. This + // prevents some weirdness because some AJAXy apps use titles for status + // messages. + bool received_page_title_; + + // Whether the current URL is starred + bool is_starred_; + + // When a navigation occurs, we record its contents MIME type. It can be + // used to check whether we can do something for some special contents. + std::string contents_mime_type_; + + // Character encoding. TODO(jungshik) : convert to std::string + std::wstring encoding_; + + // Data for shelves and stuff ------------------------------------------------ + + // The download shelf view (view at the bottom of the page). + scoped_ptr<DownloadShelf> download_shelf_; + + // Whether the shelf view is visible. + bool shelf_visible_; // ConstrainedWindow with additional methods for managing blocked - // popups. This pointer alsog goes in |child_windows_| for ownership, + // popups. This pointer also goes in |child_windows_| for ownership, // repositioning, etc. BlockedPopupContainer* blocked_popups_; // Delegates for InfoBars associated with this TabContents. std::vector<InfoBarDelegate*> infobar_delegates_; + // The last time that the download shelf was made visible. + base::TimeTicks last_download_shelf_show_; + + // Data for find in page ----------------------------------------------------- + + // TODO(brettw) this should be separated into a helper class. + + // Each time a search request comes in we assign it an id before passing it + // over the IPC so that when the results come in we can evaluate whether we + // still care about the results of the search (in some cases we don't because + // the user has issued a new search). + static int find_request_id_counter_; + + // True if the Find UI is active for this Tab. + bool find_ui_active_; + + // True if a Find operation was aborted. This can happen if the Find box is + // closed or if the search term inside the Find box is erased while a search + // is in progress. This can also be set if a page has been reloaded, and will + // on FindNext result in a full Find operation so that the highlighting for + // inactive matches can be repainted. + bool find_op_aborted_; + + // This variable keeps track of what the most recent request id is. + int current_find_request_id_; + + // The last string we searched for. This is used to figure out if this is a + // Find or a FindNext operation (FindNext should not increase the request id). + string16 find_text_; + + // Keeps track of the last search string that was used to search in any tab. + string16* find_prepopulate_text_; + + // The last find result. This object contains details about the number of + // matches, the find selection rectangle, etc. The UI can access this + // information to build its presentation. + FindNotificationDetails find_result_; + + // Data for misc internal state ---------------------------------------------- + + // See capturing_contents() above. + bool capturing_contents_; + // See getter above. bool is_being_destroyed_; + // Indicates whether we should notify about disconnection of this + // TabContents. This is used to ensure disconnection notifications only + // happen if a connection notification has happened and that they happen only + // once. + bool notify_disconnection_; + + // Maps from handle to page_id. + typedef std::map<HistoryService::Handle, int32> HistoryRequestMap; + HistoryRequestMap history_requests_; + +#if defined(OS_WIN) + // Handle to an event that's set when the page is showing a message box (or + // equivalent constrained window). Plugin processes check this to know if + // they should pump messages then. + ScopedHandle message_box_active_; +#endif + + // The time that the last javascript message was dismissed. + base::TimeTicks last_javascript_message_dismissal_; + + // True if the user has decided to block future javascript messages. This is + // reset on navigations to false on navigations. + bool suppress_javascript_messages_; + + // --------------------------------------------------------------------------- + DISALLOW_COPY_AND_ASSIGN(TabContents); }; diff --git a/chrome/browser/tab_contents/web_contents.cc b/chrome/browser/tab_contents/web_contents.cc index caa49417..6236f6a 100644 --- a/chrome/browser/tab_contents/web_contents.cc +++ b/chrome/browser/tab_contents/web_contents.cc @@ -172,48 +172,11 @@ BOOL CALLBACK InvalidateWindow(HWND hwnd, LPARAM lparam) { } // namespace -class WebContents::GearsCreateShortcutCallbackFunctor { - public: - explicit GearsCreateShortcutCallbackFunctor(WebContents* contents) - : contents_(contents) {} - - void Run(const GearsShortcutData2& shortcut_data, bool success) { - if (contents_) - contents_->OnGearsCreateShortcutDone(shortcut_data, success); - delete this; - } - void Cancel() { - contents_ = NULL; - } - - private: - WebContents* contents_; -}; - -// static -int WebContents::find_request_id_counter_ = -1; - WebContents::WebContents(Profile* profile, SiteInstance* site_instance, int routing_id, base::WaitableEvent* modal_dialog_event) - : TabContents(profile), - view_(TabContentsView::Create(this)), - ALLOW_THIS_IN_INITIALIZER_LIST(render_manager_(this, this)), - printing_(*this), - notify_disconnection_(false), - received_page_title_(false), - is_starred_(false), -#if defined(OS_WIN) - message_box_active_(CreateEvent(NULL, TRUE, FALSE, NULL)), -#endif - ALLOW_THIS_IN_INITIALIZER_LIST(fav_icon_helper_(this)), - suppress_javascript_messages_(false), - load_state_(net::LOAD_STATE_IDLE), - find_ui_active_(false), - find_op_aborted_(false), - current_find_request_id_(find_request_id_counter_++), - find_prepopulate_text_(NULL) { + : TabContents(profile) { pending_install_.page_id = 0; pending_install_.callback_functor = NULL; @@ -1770,24 +1733,6 @@ void WebContents::UpdateWebPreferences() { render_view_host()->UpdateWebPreferences(GetWebkitPrefs()); } -void WebContents::OnGearsCreateShortcutDone( - const GearsShortcutData2& shortcut_data, bool success) { - NavigationEntry* current_entry = controller_.GetLastCommittedEntry(); - bool same_page = - current_entry && pending_install_.page_id == current_entry->page_id(); - - if (success && same_page) { - // Only switch to app mode if the user chose to create a shortcut and - // we're still on the same page that it corresponded to. - if (delegate()) - delegate()->ConvertContentsToApplication(this); - } - - // Reset the page id to indicate no requests are pending. - pending_install_.page_id = 0; - pending_install_.callback_functor = NULL; -} - void WebContents::UpdateMaxPageIDIfNecessary(SiteInstance* site_instance, RenderViewHost* rvh) { // If we are creating a RVH for a restored controller, then we might diff --git a/chrome/browser/tab_contents/web_contents.h b/chrome/browser/tab_contents/web_contents.h index 5840924..a896bb6 100644 --- a/chrome/browser/tab_contents/web_contents.h +++ b/chrome/browser/tab_contents/web_contents.h @@ -9,42 +9,18 @@ #include <string> #include <vector> -#include "base/basictypes.h" -#include "chrome/browser/cancelable_request.h" -#include "chrome/browser/download/save_package.h" -#include "chrome/browser/fav_icon_helper.h" -#include "chrome/browser/find_notification_details.h" -#include "chrome/browser/renderer_host/render_view_host_delegate.h" -#include "chrome/browser/shell_dialogs.h" -#include "chrome/browser/tab_contents/navigation_controller.h" -#include "chrome/browser/tab_contents/render_view_host_manager.h" #include "chrome/browser/tab_contents/tab_contents.h" -#include "chrome/common/gears_api.h" -#include "net/base/load_states.h" -#include "webkit/glue/password_form.h" -#include "webkit/glue/webpreferences.h" - -#if defined(OS_MACOSX) || defined(OS_LINUX) -// Remove when we've finished porting the supporting classes. -#include "chrome/common/temp_scaffolding_stubs.h" -#elif defined(OS_WIN) -#include "chrome/browser/printing/print_view_manager.h" -#endif class AutofillForm; -class AutofillManager; class DOMUI; class InterstitialPageDelegate; class LoadNotificationDetails; -class PasswordManager; -class PluginInstaller; class RenderProcessHost; class RenderViewHost; class RenderWidgetHost; struct ThumbnailScore; struct ViewHostMsg_FrameNavigate_Params; struct ViewHostMsg_DidPrintPage_Params; -class TabContentsView; namespace base { class WaitableEvent; @@ -486,22 +462,6 @@ class WebContents : public TabContents, // So InterstitialPage can access SetIsLoading. friend class InterstitialPage; - // When CreateShortcut is invoked RenderViewHost::GetApplicationInfo is - // invoked. CreateShortcut caches the state of the page needed to create the - // shortcut in PendingInstall. When OnDidGetApplicationInfo is invoked, it - // uses the information from PendingInstall and the WebApplicationInfo - // to create the shortcut. - class GearsCreateShortcutCallbackFunctor; - struct PendingInstall { - int32 page_id; - SkBitmap icon; - std::wstring title; - GURL url; - // This object receives the GearsCreateShortcutCallback and routes the - // message back to the WebContents, if we haven't been deleted. - GearsCreateShortcutCallbackFunctor* callback_functor; - }; - // NotificationObserver ------------------------------------------------------ @@ -542,11 +502,6 @@ class WebContents : public TabContents, // Send webkit specific settings to the renderer. void UpdateWebPreferences(); - // Called when the user dismisses the shortcut creation dialog. 'success' is - // true if the shortcut was created. - void OnGearsCreateShortcutDone(const GearsShortcutData2& shortcut_data, - bool success); - // If our controller was restored and the page id is > than the site // instance's page id, the site instances page id is updated as well as the // renderers max page id. @@ -583,123 +538,6 @@ class WebContents : public TabContents, // the pending DOMUI, the committed DOMUI, or NULL. DOMUI* GetDOMUIForCurrentState(); - // Data ---------------------------------------------------------------------- - - // The corresponding view. - scoped_ptr<TabContentsView> view_; - - // Manages creation and swapping of render views. - RenderViewHostManager render_manager_; - - // Handles print preview and print job for this contents. - printing::PrintViewManager printing_; - - // Indicates whether we should notify about disconnection of this - // WebContents. This is used to ensure disconnection notifications only - // happen if a connection notification has happened and that they happen only - // once. - bool notify_disconnection_; - - // Maps from handle to page_id. - typedef std::map<HistoryService::Handle, int32> HistoryRequestMap; - HistoryRequestMap history_requests_; - - // System time at which the current load was started. - base::TimeTicks current_load_start_; - - // Whether we have a (non-empty) title for the current page. - // Used to prevent subsequent title updates from affecting history. This - // prevents some weirdness because some AJAXy apps use titles for status - // messages. - bool received_page_title_; - - // SavePackage, lazily created. - scoped_refptr<SavePackage> save_package_; - - // Tracks our pending CancelableRequests. This maps pending requests to - // page IDs so that we know whether a given callback still applies. The - // page ID -1 means no page ID was set. - CancelableRequestConsumerT<int32, -1> cancelable_consumer_; - - // Whether the current URL is starred - bool is_starred_; - -#if defined(OS_WIN) - // Handle to an event that's set when the page is showing a message box (or - // equivalent constrained window). Plugin processes check this to know if - // they should pump messages then. - ScopedHandle message_box_active_; -#endif - - // AutofillManager, lazily created. - scoped_ptr<AutofillManager> autofill_manager_; - - // PasswordManager, lazily created. - scoped_ptr<PasswordManager> password_manager_; - - // PluginInstaller, lazily created. - scoped_ptr<PluginInstaller> plugin_installer_; - - // Handles downloading favicons. - FavIconHelper fav_icon_helper_; - - // Dialog box used for choosing files to upload from file form fields. - scoped_refptr<SelectFileDialog> select_file_dialog_; - - // The time that the last javascript message was dismissed. - base::TimeTicks last_javascript_message_dismissal_; - - // True if the user has decided to block future javascript messages. This is - // reset on navigations to false on navigations. - bool suppress_javascript_messages_; - - // When a navigation occurs, we record its contents MIME type. It can be - // used to check whether we can do something for some special contents. - std::string contents_mime_type_; - - // Character encoding. TODO(jungshik) : convert to std::string - std::wstring encoding_; - - PendingInstall pending_install_; - - // The last time that the download shelf was made visible. - base::TimeTicks last_download_shelf_show_; - - // The current load state and the URL associated with it. - net::LoadState load_state_; - std::wstring load_state_host_; - - // True if the Find UI is active for this Tab. - bool find_ui_active_; - - // True if a Find operation was aborted. This can happen if the Find box is - // closed or if the search term inside the Find box is erased while a search - // is in progress. This can also be set if a page has been reloaded, and will - // on FindNext result in a full Find operation so that the highlighting for - // inactive matches can be repainted. - bool find_op_aborted_; - - // Each time a search request comes in we assign it an id before passing it - // over the IPC so that when the results come in we can evaluate whether we - // still care about the results of the search (in some cases we don't because - // the user has issued a new search). - static int find_request_id_counter_; - - // This variable keeps track of what the most recent request id is. - int current_find_request_id_; - - // The last string we searched for. This is used to figure out if this is a - // Find or a FindNext operation (FindNext should not increase the request id). - string16 find_text_; - - // Keeps track of the last search string that was used to search in any tab. - string16* find_prepopulate_text_; - - // The last find result. This object contains details about the number of - // matches, the find selection rectangle, etc. The UI can access this - // information to build its presentation. - FindNotificationDetails find_result_; - DISALLOW_COPY_AND_ASSIGN(WebContents); }; |