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

Side by Side Diff: chrome/browser/ui/browser_navigator.cc

Issue 21378002: Support POST in browser navaigation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 4 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 "chrome/browser/ui/browser_navigator.h" 5 #include "chrome/browser/ui/browser_navigator.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/memory/ref_counted_memory.h"
10 #include "base/prefs/pref_service.h" 11 #include "base/prefs/pref_service.h"
11 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
12 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
13 #include "chrome/browser/browser_about_handler.h" 14 #include "chrome/browser/browser_about_handler.h"
14 #include "chrome/browser/chrome_notification_types.h" 15 #include "chrome/browser/chrome_notification_types.h"
15 #include "chrome/browser/extensions/extension_service.h" 16 #include "chrome/browser/extensions/extension_service.h"
16 #include "chrome/browser/extensions/tab_helper.h" 17 #include "chrome/browser/extensions/tab_helper.h"
17 #include "chrome/browser/google/google_url_tracker.h" 18 #include "chrome/browser/google/google_url_tracker.h"
18 #include "chrome/browser/prefs/incognito_mode_prefs.h" 19 #include "chrome/browser/prefs/incognito_mode_prefs.h"
19 #include "chrome/browser/prerender/prerender_manager.h" 20 #include "chrome/browser/prerender/prerender_manager.h"
(...skipping 18 matching lines...) Expand all
38 #include "content/public/browser/notification_service.h" 39 #include "content/public/browser/notification_service.h"
39 #include "content/public/browser/render_view_host.h" 40 #include "content/public/browser/render_view_host.h"
40 #include "content/public/browser/web_contents.h" 41 #include "content/public/browser/web_contents.h"
41 #include "content/public/browser/web_contents_view.h" 42 #include "content/public/browser/web_contents_view.h"
42 43
43 #if defined(USE_AURA) 44 #if defined(USE_AURA)
44 #include "ui/aura/window.h" 45 #include "ui/aura/window.h"
45 #endif 46 #endif
46 47
47 using content::GlobalRequestID; 48 using content::GlobalRequestID;
49 using content::NavigationController;
48 using content::WebContents; 50 using content::WebContents;
49 51
50 class BrowserNavigatorWebContentsAdoption { 52 class BrowserNavigatorWebContentsAdoption {
51 public: 53 public:
52 static void AttachTabHelpers(content::WebContents* contents) { 54 static void AttachTabHelpers(content::WebContents* contents) {
53 BrowserTabContents::AttachTabHelpers(contents); 55 BrowserTabContents::AttachTabHelpers(contents);
54 } 56 }
55 }; 57 };
56 58
57 namespace { 59 namespace {
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 return Profile::FromBrowserContext( 238 return Profile::FromBrowserContext(
237 params->source_contents->GetBrowserContext()); 239 params->source_contents->GetBrowserContext());
238 } 240 }
239 241
240 return params->initiating_profile; 242 return params->initiating_profile;
241 } 243 }
242 244
243 void LoadURLInContents(WebContents* target_contents, 245 void LoadURLInContents(WebContents* target_contents,
244 const GURL& url, 246 const GURL& url,
245 chrome::NavigateParams* params) { 247 chrome::NavigateParams* params) {
246 content::NavigationController::LoadURLParams load_url_params(url); 248 NavigationController::LoadURLParams load_url_params(url);
247 load_url_params.referrer = params->referrer; 249 load_url_params.referrer = params->referrer;
248 load_url_params.transition_type = params->transition; 250 load_url_params.transition_type = params->transition;
249 load_url_params.extra_headers = params->extra_headers; 251 load_url_params.extra_headers = params->extra_headers;
250 load_url_params.should_replace_current_entry = 252 load_url_params.should_replace_current_entry =
251 params->should_replace_current_entry; 253 params->should_replace_current_entry;
252 254
253 if (params->transferred_global_request_id != GlobalRequestID()) { 255 if (params->transferred_global_request_id != GlobalRequestID()) {
254 load_url_params.is_renderer_initiated = params->is_renderer_initiated; 256 load_url_params.is_renderer_initiated = params->is_renderer_initiated;
255 load_url_params.transferred_global_request_id = 257 load_url_params.transferred_global_request_id =
256 params->transferred_global_request_id; 258 params->transferred_global_request_id;
257 } else if (params->is_renderer_initiated) { 259 } else if (params->is_renderer_initiated) {
258 load_url_params.is_renderer_initiated = true; 260 load_url_params.is_renderer_initiated = true;
259 } 261 }
262
263 if (params->uses_post) {
264 // Only allows the user-initiated navigation to use POST?
Charlie Reis 2013/08/02 16:36:41 Why is there a question here? Is this unresolved?
Johnny(Jianning) Ding 2013/08/02 23:22:55 Done.
265 load_url_params.load_type =
266 NavigationController::LOAD_TYPE_BROWSER_INITIATED_HTTP_POST;
267 load_url_params.browser_initiated_post_data =
268 base::RefCountedString::TakeString(&params->post_data);
Charlie Reis 2013/08/02 16:36:41 I agree with joth. Is it possible to use scoped_r
Johnny(Jianning) Ding 2013/08/02 23:22:55 Done.
269 }
260 target_contents->GetController().LoadURLWithParams(load_url_params); 270 target_contents->GetController().LoadURLWithParams(load_url_params);
261 } 271 }
262 272
263 // This class makes sure the Browser object held in |params| is made visible 273 // This class makes sure the Browser object held in |params| is made visible
264 // by the time it goes out of scope, provided |params| wants it to be shown. 274 // by the time it goes out of scope, provided |params| wants it to be shown.
265 class ScopedBrowserDisplayer { 275 class ScopedBrowserDisplayer {
266 public: 276 public:
267 explicit ScopedBrowserDisplayer(chrome::NavigateParams* params) 277 explicit ScopedBrowserDisplayer(chrome::NavigateParams* params)
268 : params_(params) { 278 : params_(params) {
269 } 279 }
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 is_renderer_initiated(false), 396 is_renderer_initiated(false),
387 tabstrip_index(-1), 397 tabstrip_index(-1),
388 tabstrip_add_types(TabStripModel::ADD_ACTIVE), 398 tabstrip_add_types(TabStripModel::ADD_ACTIVE),
389 window_action(NO_ACTION), 399 window_action(NO_ACTION),
390 user_gesture(true), 400 user_gesture(true),
391 path_behavior(RESPECT), 401 path_behavior(RESPECT),
392 ref_behavior(IGNORE_REF), 402 ref_behavior(IGNORE_REF),
393 browser(a_browser), 403 browser(a_browser),
394 initiating_profile(NULL), 404 initiating_profile(NULL),
395 host_desktop_type(GetHostDesktop(a_browser)), 405 host_desktop_type(GetHostDesktop(a_browser)),
396 should_replace_current_entry(false) { 406 should_replace_current_entry(false),
407 uses_post(false) {
397 } 408 }
398 409
399 NavigateParams::NavigateParams(Browser* a_browser, 410 NavigateParams::NavigateParams(Browser* a_browser,
400 WebContents* a_target_contents) 411 WebContents* a_target_contents)
401 : target_contents(a_target_contents), 412 : target_contents(a_target_contents),
402 source_contents(NULL), 413 source_contents(NULL),
403 disposition(CURRENT_TAB), 414 disposition(CURRENT_TAB),
404 transition(content::PAGE_TRANSITION_LINK), 415 transition(content::PAGE_TRANSITION_LINK),
405 is_renderer_initiated(false), 416 is_renderer_initiated(false),
406 tabstrip_index(-1), 417 tabstrip_index(-1),
407 tabstrip_add_types(TabStripModel::ADD_ACTIVE), 418 tabstrip_add_types(TabStripModel::ADD_ACTIVE),
408 window_action(NO_ACTION), 419 window_action(NO_ACTION),
409 user_gesture(true), 420 user_gesture(true),
410 path_behavior(RESPECT), 421 path_behavior(RESPECT),
411 ref_behavior(IGNORE_REF), 422 ref_behavior(IGNORE_REF),
412 browser(a_browser), 423 browser(a_browser),
413 initiating_profile(NULL), 424 initiating_profile(NULL),
414 host_desktop_type(GetHostDesktop(a_browser)), 425 host_desktop_type(GetHostDesktop(a_browser)),
415 should_replace_current_entry(false) { 426 should_replace_current_entry(false),
427 uses_post(false) {
416 } 428 }
417 429
418 NavigateParams::NavigateParams(Profile* a_profile, 430 NavigateParams::NavigateParams(Profile* a_profile,
419 const GURL& a_url, 431 const GURL& a_url,
420 content::PageTransition a_transition) 432 content::PageTransition a_transition)
421 : url(a_url), 433 : url(a_url),
422 target_contents(NULL), 434 target_contents(NULL),
423 source_contents(NULL), 435 source_contents(NULL),
424 disposition(NEW_FOREGROUND_TAB), 436 disposition(NEW_FOREGROUND_TAB),
425 transition(a_transition), 437 transition(a_transition),
426 is_renderer_initiated(false), 438 is_renderer_initiated(false),
427 tabstrip_index(-1), 439 tabstrip_index(-1),
428 tabstrip_add_types(TabStripModel::ADD_ACTIVE), 440 tabstrip_add_types(TabStripModel::ADD_ACTIVE),
429 window_action(SHOW_WINDOW), 441 window_action(SHOW_WINDOW),
430 user_gesture(true), 442 user_gesture(true),
431 path_behavior(RESPECT), 443 path_behavior(RESPECT),
432 ref_behavior(IGNORE_REF), 444 ref_behavior(IGNORE_REF),
433 browser(NULL), 445 browser(NULL),
434 initiating_profile(a_profile), 446 initiating_profile(a_profile),
435 host_desktop_type(chrome::GetActiveDesktop()), 447 host_desktop_type(chrome::GetActiveDesktop()),
436 should_replace_current_entry(false) { 448 should_replace_current_entry(false),
449 uses_post(false) {
437 } 450 }
438 451
439 NavigateParams::~NavigateParams() {} 452 NavigateParams::~NavigateParams() {}
440 453
441 void FillNavigateParamsFromOpenURLParams(chrome::NavigateParams* nav_params, 454 void FillNavigateParamsFromOpenURLParams(chrome::NavigateParams* nav_params,
442 const content::OpenURLParams& params) { 455 const content::OpenURLParams& params) {
443 nav_params->referrer = params.referrer; 456 nav_params->referrer = params.referrer;
444 nav_params->extra_headers = params.extra_headers; 457 nav_params->extra_headers = params.extra_headers;
445 nav_params->disposition = params.disposition; 458 nav_params->disposition = params.disposition;
446 nav_params->override_encoding = params.override_encoding; 459 nav_params->override_encoding = params.override_encoding;
447 nav_params->is_renderer_initiated = params.is_renderer_initiated; 460 nav_params->is_renderer_initiated = params.is_renderer_initiated;
448 nav_params->transferred_global_request_id = 461 nav_params->transferred_global_request_id =
449 params.transferred_global_request_id; 462 params.transferred_global_request_id;
450 nav_params->should_replace_current_entry = 463 nav_params->should_replace_current_entry =
451 params.should_replace_current_entry; 464 params.should_replace_current_entry;
465 nav_params->uses_post = params.uses_post;
466 nav_params->post_data = params.post_data;
452 } 467 }
453 468
454 void Navigate(NavigateParams* params) { 469 void Navigate(NavigateParams* params) {
455 Browser* source_browser = params->browser; 470 Browser* source_browser = params->browser;
456 if (source_browser) 471 if (source_browser)
457 params->initiating_profile = source_browser->profile(); 472 params->initiating_profile = source_browser->profile();
458 DCHECK(params->initiating_profile); 473 DCHECK(params->initiating_profile);
459 474
460 if (!AdjustNavigateParamsForURL(params)) 475 if (!AdjustNavigateParamsForURL(params))
461 return; 476 return;
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 bool reverse_on_redirect = false; 685 bool reverse_on_redirect = false;
671 content::BrowserURLHandler::GetInstance()->RewriteURLIfNecessary( 686 content::BrowserURLHandler::GetInstance()->RewriteURLIfNecessary(
672 &rewritten_url, browser_context, &reverse_on_redirect); 687 &rewritten_url, browser_context, &reverse_on_redirect);
673 688
674 // Some URLs are mapped to uber subpages. Do not allow them in incognito. 689 // Some URLs are mapped to uber subpages. Do not allow them in incognito.
675 return !(rewritten_url.scheme() == chrome::kChromeUIScheme && 690 return !(rewritten_url.scheme() == chrome::kChromeUIScheme &&
676 rewritten_url.host() == chrome::kChromeUIUberHost); 691 rewritten_url.host() == chrome::kChromeUIUberHost);
677 } 692 }
678 693
679 } // namespace chrome 694 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698