OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_UI_TAB_CONTENTS_TAB_CONTENTS_WRAPPER_H_ | 5 #ifndef CHROME_BROWSER_UI_TAB_CONTENTS_TAB_CONTENTS_WRAPPER_H_ |
6 #define CHROME_BROWSER_UI_TAB_CONTENTS_TAB_CONTENTS_WRAPPER_H_ | 6 #define CHROME_BROWSER_UI_TAB_CONTENTS_TAB_CONTENTS_WRAPPER_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/basictypes.h" | 12 #include "base/basictypes.h" |
13 #include "base/compiler_specific.h" | 13 #include "base/compiler_specific.h" |
14 #include "base/memory/ref_counted.h" | 14 #include "base/memory/ref_counted.h" |
15 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.h" |
16 #include "chrome/browser/prefs/pref_change_registrar.h" | |
17 #include "content/browser/tab_contents/tab_contents.h" | 16 #include "content/browser/tab_contents/tab_contents.h" |
18 #include "content/browser/tab_contents/tab_contents_observer.h" | 17 #include "content/browser/tab_contents/tab_contents_observer.h" |
19 #include "content/public/browser/notification_registrar.h" | |
20 | 18 |
| 19 class AlternateErrorPageTabObserver; |
21 class AutocompleteHistoryManager; | 20 class AutocompleteHistoryManager; |
22 class AutofillManager; | 21 class AutofillManager; |
23 class AutofillExternalDelegate; | 22 class AutofillExternalDelegate; |
24 class AutomationTabHelper; | 23 class AutomationTabHelper; |
25 class BlockedContentTabHelper; | 24 class BlockedContentTabHelper; |
26 class BookmarkTabHelper; | 25 class BookmarkTabHelper; |
27 class ConstrainedWindowTabHelper; | 26 class ConstrainedWindowTabHelper; |
| 27 class CoreTabHelper; |
28 class DownloadRequestLimiterObserver; | 28 class DownloadRequestLimiterObserver; |
29 class ExtensionTabHelper; | 29 class ExtensionTabHelper; |
30 class ExtensionWebNavigationTabObserver; | 30 class ExtensionWebNavigationTabObserver; |
31 class ExternalProtocolObserver; | 31 class ExternalProtocolObserver; |
32 class FaviconTabHelper; | 32 class FaviconTabHelper; |
33 class FindTabHelper; | 33 class FindTabHelper; |
34 class HistoryTabHelper; | 34 class HistoryTabHelper; |
35 class InfoBarTabHelper; | 35 class InfoBarTabHelper; |
36 class OmniboxSearchHint; | 36 class OmniboxSearchHint; |
37 class PasswordManager; | 37 class PasswordManager; |
38 class PasswordManagerDelegate; | 38 class PasswordManagerDelegate; |
| 39 class PDFTabObserver; |
39 class PluginObserver; | 40 class PluginObserver; |
40 class PrefService; | 41 class PrefService; |
41 class PrefsTabHelper; | 42 class PrefsTabHelper; |
42 class Profile; | 43 class Profile; |
43 class RestoreTabHelper; | 44 class RestoreTabHelper; |
44 class SadTabObserver; | 45 class SadTabObserver; |
45 class SearchEngineTabHelper; | 46 class SearchEngineTabHelper; |
| 47 class SnapshotTabHelper; |
46 class TabContentsSSLHelper; | 48 class TabContentsSSLHelper; |
47 class TabContentsWrapperDelegate; | |
48 class TabContentsWrapperSyncedTabDelegate; | 49 class TabContentsWrapperSyncedTabDelegate; |
49 class TabSpecificContentSettings; | 50 class TabSpecificContentSettings; |
50 class ThumbnailGenerator; | 51 class ThumbnailGenerator; |
51 class TranslateTabHelper; | 52 class TranslateTabHelper; |
52 class WebIntentPickerController; | 53 class WebIntentPickerController; |
53 | 54 |
54 namespace IPC { | 55 namespace IPC { |
55 class Message; | 56 class Message; |
56 } | 57 } |
57 | 58 |
58 namespace prerender { | 59 namespace prerender { |
59 class PrerenderTabHelper; | 60 class PrerenderTabHelper; |
60 } | 61 } |
61 | 62 |
62 namespace printing { | 63 namespace printing { |
63 class PrintViewManager; | 64 class PrintViewManager; |
64 class PrintPreviewMessageHandler; | 65 class PrintPreviewMessageHandler; |
65 } | 66 } |
66 | 67 |
67 namespace safe_browsing { | 68 namespace safe_browsing { |
68 class ClientSideDetectionHost; | 69 class SafeBrowsingTabObserver; |
69 } | 70 } |
70 | 71 |
71 // Wraps TabContents and all of its supporting objects in order to control | 72 // Wraps TabContents and all of its supporting objects in order to control |
72 // their ownership and lifetime, while allowing TabContents to remain generic | 73 // their ownership and lifetime, while allowing TabContents to remain generic |
73 // and re-usable in other projects. | 74 // and re-usable in other projects. |
74 // TODO(pinkerton): Eventually, this class will become TabContents as far as | 75 // TODO(pinkerton): Eventually, this class will become TabContents as far as |
75 // the browser front-end is concerned, and the current TabContents will be | 76 // the browser front-end is concerned, and the current TabContents will be |
76 // renamed to something like WebPage or WebView (ben's suggestions). | 77 // renamed to something like WebPage or WebView (ben's suggestions). |
77 class TabContentsWrapper : public TabContentsObserver, | 78 class TabContentsWrapper : public TabContentsObserver { |
78 public content::NotificationObserver { | |
79 public: | 79 public: |
80 // Takes ownership of |contents|, which must be heap-allocated (as it lives | 80 // Takes ownership of |contents|, which must be heap-allocated (as it lives |
81 // in a scoped_ptr) and can not be NULL. | 81 // in a scoped_ptr) and can not be NULL. |
82 explicit TabContentsWrapper(TabContents* contents); | 82 explicit TabContentsWrapper(TabContents* contents); |
83 virtual ~TabContentsWrapper(); | 83 virtual ~TabContentsWrapper(); |
84 | 84 |
85 // Used to retrieve this object from |tab_contents_|, which is placed in | 85 // Used to retrieve this object from |tab_contents_|, which is placed in |
86 // its property bag to avoid adding additional interfaces. | 86 // its property bag to avoid adding additional interfaces. |
87 static base::PropertyAccessor<TabContentsWrapper*>* property_accessor(); | 87 static base::PropertyAccessor<TabContentsWrapper*>* property_accessor(); |
88 | 88 |
89 static void RegisterUserPrefs(PrefService* prefs); | |
90 | |
91 // Initial title assigned to NavigationEntries from Navigate. | |
92 static string16 GetDefaultTitle(); | |
93 | |
94 // Returns a human-readable description the tab's loading state. | |
95 string16 GetStatusText() const; | |
96 | |
97 // Create a TabContentsWrapper with the same state as this one. The returned | 89 // Create a TabContentsWrapper with the same state as this one. The returned |
98 // heap-allocated pointer is owned by the caller. | 90 // heap-allocated pointer is owned by the caller. |
99 TabContentsWrapper* Clone(); | 91 TabContentsWrapper* Clone(); |
100 | 92 |
101 // Captures a snapshot of the page. | |
102 void CaptureSnapshot(); | |
103 | |
104 // Stop this tab rendering in fullscreen mode. | |
105 void ExitFullscreenMode(); | |
106 | |
107 // Helper to retrieve the existing instance that wraps a given TabContents. | 93 // Helper to retrieve the existing instance that wraps a given TabContents. |
108 // Returns NULL if there is no such existing instance. | 94 // Returns NULL if there is no such existing instance. |
109 // NOTE: This is not intended for general use. It is intended for situations | 95 // NOTE: This is not intended for general use. It is intended for situations |
110 // like callbacks from content/ where only a TabContents is available. In the | 96 // like callbacks from content/ where only a TabContents is available. In the |
111 // general case, please do NOT use this; plumb TabContentsWrapper through the | 97 // general case, please do NOT use this; plumb TabContentsWrapper through the |
112 // chrome/ code instead of TabContents. | 98 // chrome/ code instead of TabContents. |
113 static TabContentsWrapper* GetCurrentWrapperForContents( | 99 static TabContentsWrapper* GetCurrentWrapperForContents( |
114 TabContents* contents); | 100 TabContents* contents); |
115 static const TabContentsWrapper* GetCurrentWrapperForContents( | 101 static const TabContentsWrapper* GetCurrentWrapperForContents( |
116 const TabContents* contents); | 102 const TabContents* contents); |
117 | 103 |
118 TabContentsWrapperDelegate* delegate() const { return delegate_; } | |
119 void set_delegate(TabContentsWrapperDelegate* d) { delegate_ = d; } | |
120 | |
121 TabContents* tab_contents() const { return tab_contents_.get(); } | 104 TabContents* tab_contents() const { return tab_contents_.get(); } |
122 NavigationController& controller() const { | 105 NavigationController& controller() const { |
123 return tab_contents()->controller(); | 106 return tab_contents()->controller(); |
124 } | 107 } |
125 TabContentsView* view() const { return tab_contents()->view(); } | 108 TabContentsView* view() const { return tab_contents()->view(); } |
126 RenderViewHost* render_view_host() const { | 109 RenderViewHost* render_view_host() const { |
127 return tab_contents()->render_view_host(); | 110 return tab_contents()->render_view_host(); |
128 } | 111 } |
129 WebUI* web_ui() const { return tab_contents()->web_ui(); } | 112 WebUI* web_ui() const { return tab_contents()->web_ui(); } |
130 | 113 |
(...skipping 17 matching lines...) Expand all Loading... |
148 } | 131 } |
149 | 132 |
150 BookmarkTabHelper* bookmark_tab_helper() { | 133 BookmarkTabHelper* bookmark_tab_helper() { |
151 return bookmark_tab_helper_.get(); | 134 return bookmark_tab_helper_.get(); |
152 } | 135 } |
153 | 136 |
154 ConstrainedWindowTabHelper* constrained_window_tab_helper() { | 137 ConstrainedWindowTabHelper* constrained_window_tab_helper() { |
155 return constrained_window_tab_helper_.get(); | 138 return constrained_window_tab_helper_.get(); |
156 } | 139 } |
157 | 140 |
| 141 CoreTabHelper* core_tab_helper() { return core_tab_helper_.get(); } |
| 142 |
158 ExtensionTabHelper* extension_tab_helper() { | 143 ExtensionTabHelper* extension_tab_helper() { |
159 return extension_tab_helper_.get(); | 144 return extension_tab_helper_.get(); |
160 } | 145 } |
161 | 146 |
162 const ExtensionTabHelper* extension_tab_helper() const { | 147 const ExtensionTabHelper* extension_tab_helper() const { |
163 return extension_tab_helper_.get(); | 148 return extension_tab_helper_.get(); |
164 } | 149 } |
165 | 150 |
166 FaviconTabHelper* favicon_tab_helper() { return favicon_tab_helper_.get(); } | 151 FaviconTabHelper* favicon_tab_helper() { return favicon_tab_helper_.get(); } |
167 FindTabHelper* find_tab_helper() { return find_tab_helper_.get(); } | 152 FindTabHelper* find_tab_helper() { return find_tab_helper_.get(); } |
(...skipping 11 matching lines...) Expand all Loading... |
179 } | 164 } |
180 | 165 |
181 RestoreTabHelper* restore_tab_helper() { | 166 RestoreTabHelper* restore_tab_helper() { |
182 return restore_tab_helper_.get(); | 167 return restore_tab_helper_.get(); |
183 } | 168 } |
184 | 169 |
185 const RestoreTabHelper* restore_tab_helper() const { | 170 const RestoreTabHelper* restore_tab_helper() const { |
186 return restore_tab_helper_.get(); | 171 return restore_tab_helper_.get(); |
187 } | 172 } |
188 | 173 |
189 safe_browsing::ClientSideDetectionHost* safebrowsing_detection_host() { | |
190 return safebrowsing_detection_host_.get(); | |
191 } | |
192 | |
193 SearchEngineTabHelper* search_engine_tab_helper() { | 174 SearchEngineTabHelper* search_engine_tab_helper() { |
194 return search_engine_tab_helper_.get(); | 175 return search_engine_tab_helper_.get(); |
195 } | 176 } |
196 | 177 |
| 178 SnapshotTabHelper* snapshot_tab_helper() { |
| 179 return snapshot_tab_helper_.get(); |
| 180 } |
| 181 |
197 TabContentsSSLHelper* ssl_helper() { return ssl_helper_.get(); } | 182 TabContentsSSLHelper* ssl_helper() { return ssl_helper_.get(); } |
198 | 183 |
199 TabContentsWrapperSyncedTabDelegate* synced_tab_delegate() { | 184 TabContentsWrapperSyncedTabDelegate* synced_tab_delegate() { |
200 return synced_tab_delegate_.get(); | 185 return synced_tab_delegate_.get(); |
201 } | 186 } |
202 | 187 |
203 TabSpecificContentSettings* content_settings() { | 188 TabSpecificContentSettings* content_settings() { |
204 return content_settings_.get(); | 189 return content_settings_.get(); |
205 } | 190 } |
206 | 191 |
207 TranslateTabHelper* translate_tab_helper() { | 192 TranslateTabHelper* translate_tab_helper() { |
208 return translate_tab_helper_.get(); | 193 return translate_tab_helper_.get(); |
209 } | 194 } |
210 | 195 |
211 WebIntentPickerController* web_intent_picker_controller() { | 196 WebIntentPickerController* web_intent_picker_controller() { |
212 return web_intent_picker_controller_.get(); | 197 return web_intent_picker_controller_.get(); |
213 } | 198 } |
214 | 199 |
215 // Overrides ----------------------------------------------------------------- | 200 // Overrides ----------------------------------------------------------------- |
216 | 201 |
217 // TabContentsObserver overrides: | 202 // TabContentsObserver overrides: |
218 virtual void RenderViewCreated(RenderViewHost* render_view_host) OVERRIDE; | |
219 virtual void DidBecomeSelected() OVERRIDE; | |
220 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; | |
221 virtual void TabContentsDestroyed(TabContents* tab) OVERRIDE; | 203 virtual void TabContentsDestroyed(TabContents* tab) OVERRIDE; |
222 | 204 |
223 // content::NotificationObserver overrides: | |
224 virtual void Observe(int type, | |
225 const content::NotificationSource& source, | |
226 const content::NotificationDetails& details) OVERRIDE; | |
227 | |
228 private: | 205 private: |
229 FRIEND_TEST_ALL_PREFIXES( | 206 FRIEND_TEST_ALL_PREFIXES( |
230 PrefsTabHelperTest, OverridePrefsOnViewCreation); | 207 PrefsTabHelperTest, OverridePrefsOnViewCreation); |
231 | 208 |
232 // Internal helpers ---------------------------------------------------------- | |
233 | |
234 // Message handlers. | |
235 void OnSnapshot(const SkBitmap& bitmap); | |
236 void OnPDFHasUnsupportedFeature(); | |
237 | |
238 // Returns the server that can provide alternate error pages. If the returned | |
239 // URL is empty, the default error page built into WebKit will be used. | |
240 GURL GetAlternateErrorPageURL() const; | |
241 | |
242 // Send the alternate error page URL to the renderer. | |
243 void UpdateAlternateErrorPageURL(RenderViewHost* rvh); | |
244 | |
245 // Create or destroy SafebrowsingDetectionHost as needed if the user's | |
246 // safe browsing preference has changed. | |
247 void UpdateSafebrowsingDetectionHost(); | |
248 | |
249 // Data for core operation --------------------------------------------------- | |
250 | |
251 // Delegate for notifying our owner about stuff. Not owned by us. | |
252 TabContentsWrapperDelegate* delegate_; | |
253 | |
254 content::NotificationRegistrar registrar_; | |
255 PrefChangeRegistrar pref_change_registrar_; | |
256 | |
257 // Data for current page ----------------------------------------------------- | |
258 | |
259 // Shows an info-bar to users when they search from a known search engine and | |
260 // have never used the omnibox for search before. | |
261 scoped_ptr<OmniboxSearchHint> omnibox_search_hint_; | |
262 | |
263 // Tab Helpers --------------------------------------------------------------- | 209 // Tab Helpers --------------------------------------------------------------- |
264 // (These provide API for callers and have a getter function listed in the | 210 // (These provide API for callers and have a getter function listed in the |
265 // "Tab Helpers" section in the member functions area, above.) | 211 // "Tab Helpers" section in the member functions area, above.) |
266 | 212 |
267 scoped_ptr<AutocompleteHistoryManager> autocomplete_history_manager_; | 213 scoped_ptr<AutocompleteHistoryManager> autocomplete_history_manager_; |
268 scoped_refptr<AutofillManager> autofill_manager_; | 214 scoped_refptr<AutofillManager> autofill_manager_; |
269 scoped_ptr<AutofillExternalDelegate> autofill_external_delegate_; | 215 scoped_ptr<AutofillExternalDelegate> autofill_external_delegate_; |
270 scoped_ptr<AutomationTabHelper> automation_tab_helper_; | 216 scoped_ptr<AutomationTabHelper> automation_tab_helper_; |
271 scoped_ptr<BlockedContentTabHelper> blocked_content_tab_helper_; | 217 scoped_ptr<BlockedContentTabHelper> blocked_content_tab_helper_; |
272 scoped_ptr<BookmarkTabHelper> bookmark_tab_helper_; | 218 scoped_ptr<BookmarkTabHelper> bookmark_tab_helper_; |
273 scoped_ptr<ConstrainedWindowTabHelper> constrained_window_tab_helper_; | 219 scoped_ptr<ConstrainedWindowTabHelper> constrained_window_tab_helper_; |
| 220 scoped_ptr<CoreTabHelper> core_tab_helper_; |
274 scoped_ptr<ExtensionTabHelper> extension_tab_helper_; | 221 scoped_ptr<ExtensionTabHelper> extension_tab_helper_; |
275 scoped_ptr<FaviconTabHelper> favicon_tab_helper_; | 222 scoped_ptr<FaviconTabHelper> favicon_tab_helper_; |
276 scoped_ptr<FindTabHelper> find_tab_helper_; | 223 scoped_ptr<FindTabHelper> find_tab_helper_; |
277 scoped_ptr<HistoryTabHelper> history_tab_helper_; | 224 scoped_ptr<HistoryTabHelper> history_tab_helper_; |
278 scoped_ptr<InfoBarTabHelper> infobar_tab_helper_; | 225 scoped_ptr<InfoBarTabHelper> infobar_tab_helper_; |
279 | 226 |
280 // PasswordManager and its delegate. The delegate must outlive the manager, | 227 // PasswordManager and its delegate. The delegate must outlive the manager, |
281 // per documentation in password_manager.h. | 228 // per documentation in password_manager.h. |
282 scoped_ptr<PasswordManagerDelegate> password_manager_delegate_; | 229 scoped_ptr<PasswordManagerDelegate> password_manager_delegate_; |
283 scoped_ptr<PasswordManager> password_manager_; | 230 scoped_ptr<PasswordManager> password_manager_; |
284 | 231 |
285 scoped_ptr<PrefsTabHelper> prefs_tab_helper_; | 232 scoped_ptr<PrefsTabHelper> prefs_tab_helper_; |
286 scoped_ptr<prerender::PrerenderTabHelper> prerender_tab_helper_; | 233 scoped_ptr<prerender::PrerenderTabHelper> prerender_tab_helper_; |
287 | 234 |
288 // Handles print job for this contents. | 235 // Handles print job for this contents. |
289 scoped_ptr<printing::PrintViewManager> print_view_manager_; | 236 scoped_ptr<printing::PrintViewManager> print_view_manager_; |
290 | 237 |
291 scoped_ptr<RestoreTabHelper> restore_tab_helper_; | 238 scoped_ptr<RestoreTabHelper> restore_tab_helper_; |
292 | 239 |
293 // Handles displaying a web intents picker to the user. | 240 // Handles displaying a web intents picker to the user. |
294 scoped_ptr<WebIntentPickerController> web_intent_picker_controller_; | 241 scoped_ptr<WebIntentPickerController> web_intent_picker_controller_; |
295 | 242 |
296 // Handles IPCs related to SafeBrowsing client-side phishing detection. | |
297 scoped_ptr<safe_browsing::ClientSideDetectionHost> | |
298 safebrowsing_detection_host_; | |
299 | |
300 scoped_ptr<SearchEngineTabHelper> search_engine_tab_helper_; | 243 scoped_ptr<SearchEngineTabHelper> search_engine_tab_helper_; |
| 244 scoped_ptr<SnapshotTabHelper> snapshot_tab_helper_; |
301 scoped_ptr<TabContentsSSLHelper> ssl_helper_; | 245 scoped_ptr<TabContentsSSLHelper> ssl_helper_; |
302 scoped_ptr<TabContentsWrapperSyncedTabDelegate> synced_tab_delegate_; | 246 scoped_ptr<TabContentsWrapperSyncedTabDelegate> synced_tab_delegate_; |
303 | 247 |
304 // The TabSpecificContentSettings object is used to query the blocked content | 248 // The TabSpecificContentSettings object is used to query the blocked content |
305 // state by various UI elements. | 249 // state by various UI elements. |
306 scoped_ptr<TabSpecificContentSettings> content_settings_; | 250 scoped_ptr<TabSpecificContentSettings> content_settings_; |
307 | 251 |
308 scoped_ptr<TranslateTabHelper> translate_tab_helper_; | 252 scoped_ptr<TranslateTabHelper> translate_tab_helper_; |
309 | 253 |
310 // Per-tab observers --------------------------------------------------------- | 254 // Per-tab observers --------------------------------------------------------- |
311 // (These provide no API for callers; objects that need to exist 1:1 with tabs | 255 // (These provide no API for callers; objects that need to exist 1:1 with tabs |
312 // and silently do their thing live here.) | 256 // and silently do their thing live here.) |
313 | 257 |
| 258 scoped_ptr<AlternateErrorPageTabObserver> alternate_error_page_tab_observer_; |
314 scoped_ptr<DownloadRequestLimiterObserver> download_request_limiter_observer_; | 259 scoped_ptr<DownloadRequestLimiterObserver> download_request_limiter_observer_; |
315 scoped_ptr<ExtensionWebNavigationTabObserver> webnavigation_observer_; | 260 scoped_ptr<ExtensionWebNavigationTabObserver> webnavigation_observer_; |
316 scoped_ptr<ExternalProtocolObserver> external_protocol_observer_; | 261 scoped_ptr<ExternalProtocolObserver> external_protocol_observer_; |
| 262 scoped_ptr<OmniboxSearchHint> omnibox_search_hint_; |
| 263 scoped_ptr<PDFTabObserver> pdf_tab_observer_; |
317 scoped_ptr<PluginObserver> plugin_observer_; | 264 scoped_ptr<PluginObserver> plugin_observer_; |
318 scoped_ptr<printing::PrintPreviewMessageHandler> print_preview_; | 265 scoped_ptr<printing::PrintPreviewMessageHandler> print_preview_; |
319 scoped_ptr<SadTabObserver> sad_tab_observer_; | 266 scoped_ptr<SadTabObserver> sad_tab_observer_; |
| 267 scoped_ptr<safe_browsing::SafeBrowsingTabObserver> |
| 268 safe_browsing_tab_observer_; |
320 scoped_ptr<ThumbnailGenerator> thumbnail_generation_observer_; | 269 scoped_ptr<ThumbnailGenerator> thumbnail_generation_observer_; |
321 | 270 |
322 // TabContents (MUST BE LAST) ------------------------------------------------ | 271 // TabContents (MUST BE LAST) ------------------------------------------------ |
323 | 272 |
324 // If true, we're running the destructor. | 273 // If true, we're running the destructor. |
325 bool in_destructor_; | 274 bool in_destructor_; |
326 | 275 |
327 // The supporting objects need to outlive the TabContents dtor (as they may | 276 // The supporting objects need to outlive the TabContents dtor (as they may |
328 // be called upon during its execution). As a result, this must come last | 277 // be called upon during its execution). As a result, this must come last |
329 // in the list. | 278 // in the list. |
330 scoped_ptr<TabContents> tab_contents_; | 279 scoped_ptr<TabContents> tab_contents_; |
331 | 280 |
332 DISALLOW_COPY_AND_ASSIGN(TabContentsWrapper); | 281 DISALLOW_COPY_AND_ASSIGN(TabContentsWrapper); |
333 }; | 282 }; |
334 | 283 |
335 #endif // CHROME_BROWSER_UI_TAB_CONTENTS_TAB_CONTENTS_WRAPPER_H_ | 284 #endif // CHROME_BROWSER_UI_TAB_CONTENTS_TAB_CONTENTS_WRAPPER_H_ |
OLD | NEW |