| Index: chrome/browser/extensions/api/tabs/tabs_api.cc
|
| diff --git a/chrome/browser/extensions/api/tabs/tabs_api.cc b/chrome/browser/extensions/api/tabs/tabs_api.cc
|
| index 021df4b62ccce2a514dccb11a0e479d8fd8a07f1..f882148ceb736e71d22383a68d82a6b940c13383 100644
|
| --- a/chrome/browser/extensions/api/tabs/tabs_api.cc
|
| +++ b/chrome/browser/extensions/api/tabs/tabs_api.cc
|
| @@ -1320,13 +1320,25 @@ bool TabsUpdateFunction::UpdateURL(const std::string &url_string,
|
| return true;
|
| }
|
|
|
| - web_contents_->GetController().LoadURL(
|
| - url, content::Referrer(), ui::PAGE_TRANSITION_LINK, std::string());
|
| + bool use_renderer_initiated = false;
|
| + // For the PDF extension, treat it as renderer-initiated so that it does not
|
| + // show in the omnibox until it commits. This avoids URL spoofs since urls
|
| + // can be opened on behalf of untrusted content.
|
| + // TODO(devlin|nasko): Make this the default for all extensions.
|
| + if (extension() && extension()->id() == extension_misc::kPdfExtensionId)
|
| + use_renderer_initiated = true;
|
| + NavigationController::LoadURLParams load_params(url);
|
| + load_params.is_renderer_initiated = use_renderer_initiated;
|
| + web_contents_->GetController().LoadURLWithParams(load_params);
|
|
|
| // The URL of a tab contents never actually changes to a JavaScript URL, so
|
| // this check only makes sense in other cases.
|
| - if (!url.SchemeIs(url::kJavaScriptScheme))
|
| - DCHECK_EQ(url.spec(), web_contents_->GetURL().spec());
|
| + if (!url.SchemeIs(url::kJavaScriptScheme)) {
|
| + // The URL should be present in the pending entry, though it may not be
|
| + // visible in the omnibox until it commits.
|
| + DCHECK_EQ(
|
| + url, web_contents_->GetController().GetPendingEntry()->GetVirtualURL());
|
| + }
|
|
|
| return true;
|
| }
|
|
|