Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(604)

Side by Side Diff: content/browser/web_contents/interstitial_page_impl.cc

Issue 11231077: Move a bunch more code into the content namespace. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "content/browser/web_contents/interstitial_page_impl.h" 5 #include "content/browser/web_contents/interstitial_page_impl.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 21 matching lines...) Expand all
32 #include "content/public/browser/invalidate_type.h" 32 #include "content/public/browser/invalidate_type.h"
33 #include "content/public/browser/notification_service.h" 33 #include "content/public/browser/notification_service.h"
34 #include "content/public/browser/notification_source.h" 34 #include "content/public/browser/notification_source.h"
35 #include "content/public/browser/storage_partition.h" 35 #include "content/public/browser/storage_partition.h"
36 #include "content/public/browser/web_contents_view.h" 36 #include "content/public/browser/web_contents_view.h"
37 #include "content/public/common/bindings_policy.h" 37 #include "content/public/common/bindings_policy.h"
38 #include "content/public/common/page_transition_types.h" 38 #include "content/public/common/page_transition_types.h"
39 #include "net/base/escape.h" 39 #include "net/base/escape.h"
40 #include "net/url_request/url_request_context_getter.h" 40 #include "net/url_request/url_request_context_getter.h"
41 41
42 using content::BrowserThread;
43 using content::DomOperationNotificationDetails;
44 using content::InterstitialPageDelegate;
45 using content::NativeWebKeyboardEvent;
46 using content::NavigationController;
47 using content::NavigationEntry;
48 using content::NavigationEntryImpl;
49 using content::RenderViewHost;
50 using content::RenderViewHostImpl;
51 using content::RenderViewHostDelegate;
52 using content::RenderViewHostDelegateView;
53 using content::RenderWidgetHost;
54 using content::RenderWidgetHostImpl;
55 using content::RenderWidgetHostView;
56 using content::RenderWidgetHostViewPort;
57 using content::ResourceDispatcherHostImpl;
58 using content::SessionStorageNamespace;
59 using content::SiteInstance;
60 using content::WebContents;
61 using content::WebContentsView;
62 using WebKit::WebDragOperation; 42 using WebKit::WebDragOperation;
63 using WebKit::WebDragOperationsMask; 43 using WebKit::WebDragOperationsMask;
64 44
45 namespace content {
65 namespace { 46 namespace {
66 47
67 void ResourceRequestHelper(ResourceDispatcherHostImpl* rdh, 48 void ResourceRequestHelper(ResourceDispatcherHostImpl* rdh,
68 int process_id, 49 int process_id,
69 int render_view_host_id, 50 int render_view_host_id,
70 ResourceRequestAction action) { 51 ResourceRequestAction action) {
71 switch (action) { 52 switch (action) {
72 case BLOCK: 53 case BLOCK:
73 rdh->BlockRequestsForRoute(process_id, render_view_host_id); 54 rdh->BlockRequestsForRoute(process_id, render_view_host_id);
74 break; 55 break;
75 case RESUME: 56 case RESUME:
76 rdh->ResumeBlockedRequestsForRoute(process_id, render_view_host_id); 57 rdh->ResumeBlockedRequestsForRoute(process_id, render_view_host_id);
77 break; 58 break;
78 case CANCEL: 59 case CANCEL:
79 rdh->CancelBlockedRequestsForRoute(process_id, render_view_host_id); 60 rdh->CancelBlockedRequestsForRoute(process_id, render_view_host_id);
80 break; 61 break;
81 default: 62 default:
82 NOTREACHED(); 63 NOTREACHED();
83 } 64 }
84 } 65 }
85 66
86 } // namespace 67 } // namespace
87 68
88 class InterstitialPageImpl::InterstitialPageRVHDelegateView 69 class InterstitialPageImpl::InterstitialPageRVHDelegateView
89 : public content::RenderViewHostDelegateView { 70 : public RenderViewHostDelegateView {
90 public: 71 public:
91 explicit InterstitialPageRVHDelegateView(InterstitialPageImpl* page); 72 explicit InterstitialPageRVHDelegateView(InterstitialPageImpl* page);
92 73
93 // RenderViewHostDelegateView implementation: 74 // RenderViewHostDelegateView implementation:
94 virtual void ShowPopupMenu(const gfx::Rect& bounds, 75 virtual void ShowPopupMenu(const gfx::Rect& bounds,
95 int item_height, 76 int item_height,
96 double item_font_size, 77 double item_font_size,
97 int selected_item, 78 int selected_item,
98 const std::vector<WebMenuItem>& items, 79 const std::vector<WebMenuItem>& items,
99 bool right_aligned, 80 bool right_aligned,
(...skipping 23 matching lines...) Expand all
123 typedef std::map<WebContents*, InterstitialPageImpl*> InterstitialPageMap; 104 typedef std::map<WebContents*, InterstitialPageImpl*> InterstitialPageMap;
124 static InterstitialPageMap* g_web_contents_to_interstitial_page; 105 static InterstitialPageMap* g_web_contents_to_interstitial_page;
125 106
126 // Initializes g_web_contents_to_interstitial_page in a thread-safe manner. 107 // Initializes g_web_contents_to_interstitial_page in a thread-safe manner.
127 // Should be called before accessing g_web_contents_to_interstitial_page. 108 // Should be called before accessing g_web_contents_to_interstitial_page.
128 static void InitInterstitialPageMap() { 109 static void InitInterstitialPageMap() {
129 if (!g_web_contents_to_interstitial_page) 110 if (!g_web_contents_to_interstitial_page)
130 g_web_contents_to_interstitial_page = new InterstitialPageMap; 111 g_web_contents_to_interstitial_page = new InterstitialPageMap;
131 } 112 }
132 113
133 namespace content {
134
135 InterstitialPage* InterstitialPage::Create(WebContents* web_contents, 114 InterstitialPage* InterstitialPage::Create(WebContents* web_contents,
136 bool new_navigation, 115 bool new_navigation,
137 const GURL& url, 116 const GURL& url,
138 InterstitialPageDelegate* delegate) { 117 InterstitialPageDelegate* delegate) {
139 return new InterstitialPageImpl(web_contents, new_navigation, url, delegate); 118 return new InterstitialPageImpl(web_contents, new_navigation, url, delegate);
140 } 119 }
141 120
142 InterstitialPage* InterstitialPage::GetInterstitialPage( 121 InterstitialPage* InterstitialPage::GetInterstitialPage(
143 WebContents* web_contents) { 122 WebContents* web_contents) {
144 InitInterstitialPageMap(); 123 InitInterstitialPageMap();
145 InterstitialPageMap::const_iterator iter = 124 InterstitialPageMap::const_iterator iter =
146 g_web_contents_to_interstitial_page->find(web_contents); 125 g_web_contents_to_interstitial_page->find(web_contents);
147 if (iter == g_web_contents_to_interstitial_page->end()) 126 if (iter == g_web_contents_to_interstitial_page->end())
148 return NULL; 127 return NULL;
149 128
150 return iter->second; 129 return iter->second;
151 } 130 }
152 131
153 } // namespace content
154
155 InterstitialPageImpl::InterstitialPageImpl(WebContents* web_contents, 132 InterstitialPageImpl::InterstitialPageImpl(WebContents* web_contents,
156 bool new_navigation, 133 bool new_navigation,
157 const GURL& url, 134 const GURL& url,
158 InterstitialPageDelegate* delegate) 135 InterstitialPageDelegate* delegate)
159 : web_contents_(static_cast<WebContentsImpl*>(web_contents)), 136 : web_contents_(static_cast<WebContentsImpl*>(web_contents)),
160 url_(url), 137 url_(url),
161 new_navigation_(new_navigation), 138 new_navigation_(new_navigation),
162 should_discard_pending_nav_entry_(new_navigation), 139 should_discard_pending_nav_entry_(new_navigation),
163 reload_on_dont_proceed_(false), 140 reload_on_dont_proceed_(false),
164 enabled_(true), 141 enabled_(true),
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 } 185 }
209 } 186 }
210 187
211 // Block the resource requests for the render view host while it is hidden. 188 // Block the resource requests for the render view host while it is hidden.
212 TakeActionOnResourceDispatcher(BLOCK); 189 TakeActionOnResourceDispatcher(BLOCK);
213 // We need to be notified when the RenderViewHost is destroyed so we can 190 // We need to be notified when the RenderViewHost is destroyed so we can
214 // cancel the blocked requests. We cannot do that on 191 // cancel the blocked requests. We cannot do that on
215 // NOTIFY_WEB_CONTENTS_DESTROYED as at that point the RenderViewHost has 192 // NOTIFY_WEB_CONTENTS_DESTROYED as at that point the RenderViewHost has
216 // already been destroyed. 193 // already been destroyed.
217 notification_registrar_.Add( 194 notification_registrar_.Add(
218 this, content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED, 195 this, NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED,
219 content::Source<RenderWidgetHost>(web_contents_->GetRenderViewHost())); 196 Source<RenderWidgetHost>(web_contents_->GetRenderViewHost()));
220 197
221 // Update the g_web_contents_to_interstitial_page map. 198 // Update the g_web_contents_to_interstitial_page map.
222 iter = g_web_contents_to_interstitial_page->find(web_contents_); 199 iter = g_web_contents_to_interstitial_page->find(web_contents_);
223 DCHECK(iter == g_web_contents_to_interstitial_page->end()); 200 DCHECK(iter == g_web_contents_to_interstitial_page->end());
224 (*g_web_contents_to_interstitial_page)[web_contents_] = this; 201 (*g_web_contents_to_interstitial_page)[web_contents_] = this;
225 202
226 if (new_navigation_) { 203 if (new_navigation_) {
227 NavigationEntryImpl* entry = new NavigationEntryImpl; 204 NavigationEntryImpl* entry = new NavigationEntryImpl;
228 entry->SetURL(url_); 205 entry->SetURL(url_);
229 entry->SetVirtualURL(url_); 206 entry->SetVirtualURL(url_);
230 entry->set_page_type(content::PAGE_TYPE_INTERSTITIAL); 207 entry->set_page_type(PAGE_TYPE_INTERSTITIAL);
231 208
232 // Give delegates a chance to set some states on the navigation entry. 209 // Give delegates a chance to set some states on the navigation entry.
233 delegate_->OverrideEntry(entry); 210 delegate_->OverrideEntry(entry);
234 211
235 web_contents_->GetController().AddTransientEntry(entry); 212 web_contents_->GetController().AddTransientEntry(entry);
236 } 213 }
237 214
238 DCHECK(!render_view_host_); 215 DCHECK(!render_view_host_);
239 render_view_host_ = static_cast<RenderViewHostImpl*>(CreateRenderViewHost()); 216 render_view_host_ = static_cast<RenderViewHostImpl*>(CreateRenderViewHost());
240 CreateWebContentsView(); 217 CreateWebContentsView();
241 218
242 std::string data_url = "data:text/html;charset=utf-8," + 219 std::string data_url = "data:text/html;charset=utf-8," +
243 net::EscapePath(delegate_->GetHTMLContents()); 220 net::EscapePath(delegate_->GetHTMLContents());
244 render_view_host_->NavigateToURL(GURL(data_url)); 221 render_view_host_->NavigateToURL(GURL(data_url));
245 222
246 notification_registrar_.Add(this, 223 notification_registrar_.Add(this,
247 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, 224 NOTIFICATION_WEB_CONTENTS_DESTROYED,
248 content::Source<WebContents>(web_contents_)); 225 Source<WebContents>(web_contents_));
249 notification_registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, 226 notification_registrar_.Add(this, NOTIFICATION_NAV_ENTRY_COMMITTED,
250 content::Source<NavigationController>(&web_contents_->GetController())); 227 Source<NavigationController>(&web_contents_->GetController()));
251 notification_registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_PENDING, 228 notification_registrar_.Add(this, NOTIFICATION_NAV_ENTRY_PENDING,
252 content::Source<NavigationController>(&web_contents_->GetController())); 229 Source<NavigationController>(&web_contents_->GetController()));
253 notification_registrar_.Add( 230 notification_registrar_.Add(
254 this, content::NOTIFICATION_DOM_OPERATION_RESPONSE, 231 this, NOTIFICATION_DOM_OPERATION_RESPONSE,
255 content::Source<RenderViewHost>(render_view_host_)); 232 Source<RenderViewHost>(render_view_host_));
256 } 233 }
257 234
258 void InterstitialPageImpl::Hide() { 235 void InterstitialPageImpl::Hide() {
259 RenderWidgetHostView* old_view = 236 RenderWidgetHostView* old_view =
260 web_contents_->GetRenderViewHost()->GetView(); 237 web_contents_->GetRenderViewHost()->GetView();
261 if (web_contents_->GetInterstitialPage() == this && 238 if (web_contents_->GetInterstitialPage() == this &&
262 old_view && !old_view->IsShowing()) { 239 old_view && !old_view->IsShowing()) {
263 // Show the original RVH since we're going away. Note it might not exist if 240 // Show the original RVH since we're going away. Note it might not exist if
264 // the renderer crashed while the interstitial was showing. 241 // the renderer crashed while the interstitial was showing.
265 // Note that it is important that we don't call Show() if the view is 242 // Note that it is important that we don't call Show() if the view is
(...skipping 12 matching lines...) Expand all
278 } 255 }
279 256
280 render_view_host_->Shutdown(); 257 render_view_host_->Shutdown();
281 render_view_host_ = NULL; 258 render_view_host_ = NULL;
282 if (web_contents_->GetInterstitialPage()) 259 if (web_contents_->GetInterstitialPage())
283 web_contents_->remove_interstitial_page(); 260 web_contents_->remove_interstitial_page();
284 // Let's revert to the original title if necessary. 261 // Let's revert to the original title if necessary.
285 NavigationEntry* entry = web_contents_->GetController().GetActiveEntry(); 262 NavigationEntry* entry = web_contents_->GetController().GetActiveEntry();
286 if (!new_navigation_ && should_revert_web_contents_title_) { 263 if (!new_navigation_ && should_revert_web_contents_title_) {
287 entry->SetTitle(original_web_contents_title_); 264 entry->SetTitle(original_web_contents_title_);
288 web_contents_->NotifyNavigationStateChanged(content::INVALIDATE_TYPE_TITLE); 265 web_contents_->NotifyNavigationStateChanged(INVALIDATE_TYPE_TITLE);
289 } 266 }
290 267
291 content::NotificationService::current()->Notify( 268 NotificationService::current()->Notify(
292 content::NOTIFICATION_INTERSTITIAL_DETACHED, 269 NOTIFICATION_INTERSTITIAL_DETACHED,
293 content::Source<WebContents>(web_contents_), 270 Source<WebContents>(web_contents_),
294 content::NotificationService::NoDetails()); 271 NotificationService::NoDetails());
295 272
296 InterstitialPageMap::iterator iter = 273 InterstitialPageMap::iterator iter =
297 g_web_contents_to_interstitial_page->find(web_contents_); 274 g_web_contents_to_interstitial_page->find(web_contents_);
298 DCHECK(iter != g_web_contents_to_interstitial_page->end()); 275 DCHECK(iter != g_web_contents_to_interstitial_page->end());
299 if (iter != g_web_contents_to_interstitial_page->end()) 276 if (iter != g_web_contents_to_interstitial_page->end())
300 g_web_contents_to_interstitial_page->erase(iter); 277 g_web_contents_to_interstitial_page->erase(iter);
301 } 278 }
302 279
303 void InterstitialPageImpl::Observe( 280 void InterstitialPageImpl::Observe(
304 int type, 281 int type,
305 const content::NotificationSource& source, 282 const NotificationSource& source,
306 const content::NotificationDetails& details) { 283 const NotificationDetails& details) {
307 switch (type) { 284 switch (type) {
308 case content::NOTIFICATION_NAV_ENTRY_PENDING: 285 case NOTIFICATION_NAV_ENTRY_PENDING:
309 // We are navigating away from the interstitial (the user has typed a URL 286 // We are navigating away from the interstitial (the user has typed a URL
310 // in the location bar or clicked a bookmark). Make sure clicking on the 287 // in the location bar or clicked a bookmark). Make sure clicking on the
311 // interstitial will have no effect. Also cancel any blocked requests 288 // interstitial will have no effect. Also cancel any blocked requests
312 // on the ResourceDispatcherHost. Note that when we get this notification 289 // on the ResourceDispatcherHost. Note that when we get this notification
313 // the RenderViewHost has not yet navigated so we'll unblock the 290 // the RenderViewHost has not yet navigated so we'll unblock the
314 // RenderViewHost before the resource request for the new page we are 291 // RenderViewHost before the resource request for the new page we are
315 // navigating arrives in the ResourceDispatcherHost. This ensures that 292 // navigating arrives in the ResourceDispatcherHost. This ensures that
316 // request won't be blocked if the same RenderViewHost was used for the 293 // request won't be blocked if the same RenderViewHost was used for the
317 // new navigation. 294 // new navigation.
318 Disable(); 295 Disable();
319 TakeActionOnResourceDispatcher(CANCEL); 296 TakeActionOnResourceDispatcher(CANCEL);
320 break; 297 break;
321 case content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED: 298 case NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED:
322 if (action_taken_ == NO_ACTION) { 299 if (action_taken_ == NO_ACTION) {
323 // The RenderViewHost is being destroyed (as part of the tab being 300 // The RenderViewHost is being destroyed (as part of the tab being
324 // closed); make sure we clear the blocked requests. 301 // closed); make sure we clear the blocked requests.
325 RenderViewHost* rvh = static_cast<RenderViewHost*>( 302 RenderViewHost* rvh = static_cast<RenderViewHost*>(
326 static_cast<RenderViewHostImpl*>( 303 static_cast<RenderViewHostImpl*>(
327 RenderWidgetHostImpl::From( 304 RenderWidgetHostImpl::From(
328 content::Source<RenderWidgetHost>(source).ptr()))); 305 Source<RenderWidgetHost>(source).ptr())));
329 DCHECK(rvh->GetProcess()->GetID() == original_child_id_ && 306 DCHECK(rvh->GetProcess()->GetID() == original_child_id_ &&
330 rvh->GetRoutingID() == original_rvh_id_); 307 rvh->GetRoutingID() == original_rvh_id_);
331 TakeActionOnResourceDispatcher(CANCEL); 308 TakeActionOnResourceDispatcher(CANCEL);
332 } 309 }
333 break; 310 break;
334 case content::NOTIFICATION_WEB_CONTENTS_DESTROYED: 311 case NOTIFICATION_WEB_CONTENTS_DESTROYED:
335 case content::NOTIFICATION_NAV_ENTRY_COMMITTED: 312 case NOTIFICATION_NAV_ENTRY_COMMITTED:
336 if (action_taken_ == NO_ACTION) { 313 if (action_taken_ == NO_ACTION) {
337 // We are navigating away from the interstitial or closing a tab with an 314 // We are navigating away from the interstitial or closing a tab with an
338 // interstitial. Default to DontProceed(). We don't just call Hide as 315 // interstitial. Default to DontProceed(). We don't just call Hide as
339 // subclasses will almost certainly override DontProceed to do some work 316 // subclasses will almost certainly override DontProceed to do some work
340 // (ex: close pending connections). 317 // (ex: close pending connections).
341 DontProceed(); 318 DontProceed();
342 } else { 319 } else {
343 // User decided to proceed and either the navigation was committed or 320 // User decided to proceed and either the navigation was committed or
344 // the tab was closed before that. 321 // the tab was closed before that.
345 Hide(); 322 Hide();
346 delete this; 323 delete this;
347 } 324 }
348 break; 325 break;
349 case content::NOTIFICATION_DOM_OPERATION_RESPONSE: 326 case NOTIFICATION_DOM_OPERATION_RESPONSE:
350 if (enabled()) { 327 if (enabled()) {
351 content::Details<DomOperationNotificationDetails> dom_op_details( 328 Details<DomOperationNotificationDetails> dom_op_details(
352 details); 329 details);
353 delegate_->CommandReceived(dom_op_details->json); 330 delegate_->CommandReceived(dom_op_details->json);
354 } 331 }
355 break; 332 break;
356 default: 333 default:
357 NOTREACHED(); 334 NOTREACHED();
358 } 335 }
359 } 336 }
360 337
361 RenderViewHostDelegateView* InterstitialPageImpl::GetDelegateView() { 338 RenderViewHostDelegateView* InterstitialPageImpl::GetDelegateView() {
(...skipping 15 matching lines...) Expand all
377 void InterstitialPageImpl::DidNavigate( 354 void InterstitialPageImpl::DidNavigate(
378 RenderViewHost* render_view_host, 355 RenderViewHost* render_view_host,
379 const ViewHostMsg_FrameNavigate_Params& params) { 356 const ViewHostMsg_FrameNavigate_Params& params) {
380 // A fast user could have navigated away from the page that triggered the 357 // A fast user could have navigated away from the page that triggered the
381 // interstitial while the interstitial was loading, that would have disabled 358 // interstitial while the interstitial was loading, that would have disabled
382 // us. In that case we can dismiss ourselves. 359 // us. In that case we can dismiss ourselves.
383 if (!enabled_) { 360 if (!enabled_) {
384 DontProceed(); 361 DontProceed();
385 return; 362 return;
386 } 363 }
387 if (params.transition == content::PAGE_TRANSITION_AUTO_SUBFRAME) { 364 if (params.transition == PAGE_TRANSITION_AUTO_SUBFRAME) {
388 // No need to handle navigate message from iframe in the interstitial page. 365 // No need to handle navigate message from iframe in the interstitial page.
389 return; 366 return;
390 } 367 }
391 368
392 // The RenderViewHost has loaded its contents, we can show it now. 369 // The RenderViewHost has loaded its contents, we can show it now.
393 render_view_host_->GetView()->Show(); 370 render_view_host_->GetView()->Show();
394 web_contents_->set_interstitial_page(this); 371 web_contents_->set_interstitial_page(this);
395 372
396 // This notification hides the bookmark bar. Note that this has to happen 373 // This notification hides the bookmark bar. Note that this has to happen
397 // after the interstitial page was registered with |web_contents_|, since 374 // after the interstitial page was registered with |web_contents_|, since
398 // there will be a callback to |web_contents_| testing if an interstitial page 375 // there will be a callback to |web_contents_| testing if an interstitial page
399 // is showing before hiding the bookmark bar. 376 // is showing before hiding the bookmark bar.
400 content::NotificationService::current()->Notify( 377 NotificationService::current()->Notify(
401 content::NOTIFICATION_INTERSTITIAL_ATTACHED, 378 NOTIFICATION_INTERSTITIAL_ATTACHED,
402 content::Source<WebContents>(web_contents_), 379 Source<WebContents>(web_contents_),
403 content::NotificationService::NoDetails()); 380 NotificationService::NoDetails());
404 381
405 RenderWidgetHostView* rwh_view = 382 RenderWidgetHostView* rwh_view =
406 web_contents_->GetRenderViewHost()->GetView(); 383 web_contents_->GetRenderViewHost()->GetView();
407 384
408 // The RenderViewHost may already have crashed before we even get here. 385 // The RenderViewHost may already have crashed before we even get here.
409 if (rwh_view) { 386 if (rwh_view) {
410 // If the page has focus, focus the interstitial. 387 // If the page has focus, focus the interstitial.
411 if (rwh_view->HasFocus()) 388 if (rwh_view->HasFocus())
412 Focus(); 389 Focus();
413 390
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 423
447 // If this interstitial is shown on an existing navigation entry, we'll need 424 // If this interstitial is shown on an existing navigation entry, we'll need
448 // to remember its title so we can revert to it when hidden. 425 // to remember its title so we can revert to it when hidden.
449 if (!new_navigation_ && !should_revert_web_contents_title_) { 426 if (!new_navigation_ && !should_revert_web_contents_title_) {
450 original_web_contents_title_ = entry->GetTitle(); 427 original_web_contents_title_ = entry->GetTitle();
451 should_revert_web_contents_title_ = true; 428 should_revert_web_contents_title_ = true;
452 } 429 }
453 // TODO(evan): make use of title_direction. 430 // TODO(evan): make use of title_direction.
454 // http://code.google.com/p/chromium/issues/detail?id=27094 431 // http://code.google.com/p/chromium/issues/detail?id=27094
455 entry->SetTitle(title); 432 entry->SetTitle(title);
456 web_contents_->NotifyNavigationStateChanged(content::INVALIDATE_TYPE_TITLE); 433 web_contents_->NotifyNavigationStateChanged(INVALIDATE_TYPE_TITLE);
457 } 434 }
458 435
459 content::RendererPreferences InterstitialPageImpl::GetRendererPrefs( 436 RendererPreferences InterstitialPageImpl::GetRendererPrefs(
460 content::BrowserContext* browser_context) const { 437 BrowserContext* browser_context) const {
461 delegate_->OverrideRendererPrefs(&renderer_preferences_); 438 delegate_->OverrideRendererPrefs(&renderer_preferences_);
462 return renderer_preferences_; 439 return renderer_preferences_;
463 } 440 }
464 441
465 webkit_glue::WebPreferences InterstitialPageImpl::GetWebkitPrefs() { 442 webkit_glue::WebPreferences InterstitialPageImpl::GetWebkitPrefs() {
466 return WebContentsImpl::GetWebkitPrefs(render_view_host_, url_); 443 return WebContentsImpl::GetWebkitPrefs(render_view_host_, url_);
467 } 444 }
468 445
469 bool InterstitialPageImpl::PreHandleKeyboardEvent( 446 bool InterstitialPageImpl::PreHandleKeyboardEvent(
470 const NativeWebKeyboardEvent& event, 447 const NativeWebKeyboardEvent& event,
471 bool* is_keyboard_shortcut) { 448 bool* is_keyboard_shortcut) {
472 return web_contents_->PreHandleKeyboardEvent(event, is_keyboard_shortcut); 449 return web_contents_->PreHandleKeyboardEvent(event, is_keyboard_shortcut);
473 } 450 }
474 451
475 void InterstitialPageImpl::HandleKeyboardEvent( 452 void InterstitialPageImpl::HandleKeyboardEvent(
476 const NativeWebKeyboardEvent& event) { 453 const NativeWebKeyboardEvent& event) {
477 return web_contents_->HandleKeyboardEvent(event); 454 return web_contents_->HandleKeyboardEvent(event);
478 } 455 }
479 456
480 WebContents* InterstitialPageImpl::web_contents() const { 457 WebContents* InterstitialPageImpl::web_contents() const {
481 return web_contents_; 458 return web_contents_;
482 } 459 }
483 460
484 RenderViewHost* InterstitialPageImpl::CreateRenderViewHost() { 461 RenderViewHost* InterstitialPageImpl::CreateRenderViewHost() {
485 // Interstitial pages don't want to share the session storage so we mint a 462 // Interstitial pages don't want to share the session storage so we mint a
486 // new one. 463 // new one.
487 using content::BrowserContext;
488 BrowserContext* browser_context = web_contents()->GetBrowserContext(); 464 BrowserContext* browser_context = web_contents()->GetBrowserContext();
489 scoped_refptr<SiteInstance> site_instance = 465 scoped_refptr<SiteInstance> site_instance =
490 SiteInstance::Create(browser_context); 466 SiteInstance::Create(browser_context);
491 DOMStorageContextImpl* dom_storage_context = 467 DOMStorageContextImpl* dom_storage_context =
492 static_cast<DOMStorageContextImpl*>( 468 static_cast<DOMStorageContextImpl*>(
493 BrowserContext::GetStoragePartition( 469 BrowserContext::GetStoragePartition(
494 browser_context, site_instance)->GetDOMStorageContext()); 470 browser_context, site_instance)->GetDOMStorageContext());
495 SessionStorageNamespaceImpl* session_storage_namespace_impl = 471 SessionStorageNamespaceImpl* session_storage_namespace_impl =
496 new SessionStorageNamespaceImpl(dom_storage_context); 472 new SessionStorageNamespaceImpl(dom_storage_context);
497 473
498 RenderViewHostImpl* render_view_host = new RenderViewHostImpl( 474 RenderViewHostImpl* render_view_host = new RenderViewHostImpl(
499 site_instance, this, this, MSG_ROUTING_NONE, false, 475 site_instance, this, this, MSG_ROUTING_NONE, false,
500 session_storage_namespace_impl); 476 session_storage_namespace_impl);
501 web_contents_->RenderViewForInterstitialPageCreated(render_view_host); 477 web_contents_->RenderViewForInterstitialPageCreated(render_view_host);
502 return render_view_host; 478 return render_view_host;
503 } 479 }
504 480
505 WebContentsView* InterstitialPageImpl::CreateWebContentsView() { 481 WebContentsView* InterstitialPageImpl::CreateWebContentsView() {
506 if (!create_view_) 482 if (!create_view_)
507 return NULL; 483 return NULL;
508 WebContentsView* web_contents_view = web_contents()->GetView(); 484 WebContentsView* web_contents_view = web_contents()->GetView();
509 RenderWidgetHostView* view = 485 RenderWidgetHostView* view =
510 web_contents_view->CreateViewForWidget(render_view_host_); 486 web_contents_view->CreateViewForWidget(render_view_host_);
511 render_view_host_->SetView(view); 487 render_view_host_->SetView(view);
512 render_view_host_->AllowBindings(content::BINDINGS_POLICY_DOM_AUTOMATION); 488 render_view_host_->AllowBindings(BINDINGS_POLICY_DOM_AUTOMATION);
513 489
514 int32 max_page_id = web_contents()-> 490 int32 max_page_id = web_contents()->
515 GetMaxPageIDForSiteInstance(render_view_host_->GetSiteInstance()); 491 GetMaxPageIDForSiteInstance(render_view_host_->GetSiteInstance());
516 render_view_host_->CreateRenderView(string16(), 492 render_view_host_->CreateRenderView(string16(),
517 MSG_ROUTING_NONE, 493 MSG_ROUTING_NONE,
518 max_page_id, 494 max_page_id,
519 std::string(), 495 std::string(),
520 -1); 496 -1);
521 view->SetSize(web_contents_view->GetContainerSize()); 497 view->SetSize(web_contents_view->GetContainerSize());
522 // Don't show the interstitial until we have navigated to it. 498 // Don't show the interstitial until we have navigated to it.
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 const gfx::Rect& initial_pos) { 644 const gfx::Rect& initial_pos) {
669 NOTREACHED() << "InterstitialPage does not support showing drop-downs yet."; 645 NOTREACHED() << "InterstitialPage does not support showing drop-downs yet.";
670 } 646 }
671 647
672 void InterstitialPageImpl::ShowCreatedFullscreenWidget(int route_id) { 648 void InterstitialPageImpl::ShowCreatedFullscreenWidget(int route_id) {
673 NOTREACHED() 649 NOTREACHED()
674 << "InterstitialPage does not support showing full screen popups."; 650 << "InterstitialPage does not support showing full screen popups.";
675 } 651 }
676 652
677 void InterstitialPageImpl::ShowContextMenu( 653 void InterstitialPageImpl::ShowContextMenu(
678 const content::ContextMenuParams& params, 654 const ContextMenuParams& params,
679 content::ContextMenuSourceType type) { 655 ContextMenuSourceType type) {
680 } 656 }
681 657
682 void InterstitialPageImpl::Disable() { 658 void InterstitialPageImpl::Disable() {
683 enabled_ = false; 659 enabled_ = false;
684 } 660 }
685 661
686 void InterstitialPageImpl::TakeActionOnResourceDispatcher( 662 void InterstitialPageImpl::TakeActionOnResourceDispatcher(
687 ResourceRequestAction action) { 663 ResourceRequestAction action) {
688 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)) << 664 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)) <<
689 "TakeActionOnResourceDispatcher should be called on the main thread."; 665 "TakeActionOnResourceDispatcher should be called on the main thread.";
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 if (!web_contents->GetDelegateView()) 732 if (!web_contents->GetDelegateView())
757 return; 733 return;
758 734
759 web_contents->GetDelegateView()->TakeFocus(reverse); 735 web_contents->GetDelegateView()->TakeFocus(reverse);
760 } 736 }
761 737
762 void InterstitialPageImpl::InterstitialPageRVHDelegateView::OnFindReply( 738 void InterstitialPageImpl::InterstitialPageRVHDelegateView::OnFindReply(
763 int request_id, int number_of_matches, const gfx::Rect& selection_rect, 739 int request_id, int number_of_matches, const gfx::Rect& selection_rect,
764 int active_match_ordinal, bool final_update) { 740 int active_match_ordinal, bool final_update) {
765 } 741 }
742
743 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/web_contents/interstitial_page_impl.h ('k') | content/browser/web_contents/navigation_controller_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698