diff options
author | cdn@chromium.org <cdn@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-24 23:43:44 +0000 |
---|---|---|
committer | cdn@chromium.org <cdn@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-24 23:43:44 +0000 |
commit | 067095afacfdf4673bc397b3ca4623d037e7afc7 (patch) | |
tree | bed5c9e6b786b1d24289fc9a45431823a73c8903 | |
parent | c5f0890eab108b75f3c5207643665ff5c17fb176 (diff) | |
download | chromium_src-067095afacfdf4673bc397b3ca4623d037e7afc7.zip chromium_src-067095afacfdf4673bc397b3ca4623d037e7afc7.tar.gz chromium_src-067095afacfdf4673bc397b3ca4623d037e7afc7.tar.bz2 |
Strip leading "javascript:" schemas from text pasted or dropped into the omnibox.
Do not show the Paste and Go option for URIs with a javascript schema.
BUG=82181
TEST=N/A
Review URL: http://codereview.chromium.org/6982011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86525 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm | 7 | ||||
-rw-r--r-- | chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm | 7 | ||||
-rw-r--r-- | chrome/browser/ui/omnibox/omnibox_view.cc | 22 | ||||
-rw-r--r-- | chrome/browser/ui/omnibox/omnibox_view.h | 7 | ||||
-rw-r--r-- | chrome/browser/ui/views/omnibox/omnibox_view_win.cc | 11 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 1 |
6 files changed, 46 insertions, 9 deletions
diff --git a/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm b/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm index fc95d7e..bb565a3 100644 --- a/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm +++ b/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm @@ -1070,7 +1070,7 @@ string16 OmniboxViewMac::GetClipboardText(ui::Clipboard* clipboard) { // lines in terminals, email programs, etc., and so linebreaks indicate // completely bogus whitespace that would just cause the input to be // invalid. - return CollapseWhitespace(text16, true); + return CollapseWhitespace(StripJavascriptSchemas(text16), true); } // Try bookmark format. @@ -1086,9 +1086,8 @@ string16 OmniboxViewMac::GetClipboardText(ui::Clipboard* clipboard) { clipboard->ReadBookmark(NULL, &url_str); // pass resulting url string through GURL to normalize GURL url(url_str); - if (url.is_valid()) { - return UTF8ToUTF16(url.spec()); - } + if (url.is_valid()) + return StripJavascriptSchemas(UTF8ToUTF16(url.spec())); } return string16(); diff --git a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm index bb681ce..39f3320 100644 --- a/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm +++ b/chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm @@ -9,7 +9,9 @@ #include "app/mac/nsimage_cache.h" #include "base/mac/mac_util.h" #include "base/memory/singleton.h" +#include "base/string_util.h" #include "base/sys_string_conversions.h" +#include "base/utf_string_conversions.h" #include "chrome/app/chrome_command_ids.h" #include "chrome/browser/autocomplete/autocomplete.h" #include "chrome/browser/autocomplete/autocomplete_classifier.h" @@ -757,6 +759,11 @@ class NotificationBridge : public NotificationObserver { GURL url(URLFixerUpper::FixupURL( base::SysNSStringToUTF8([urls objectAtIndex:0]), std::string())); + if (url.SchemeIs(chrome::kJavaScriptScheme)) { + browser_->window()->GetLocationBar()->location_entry()->SetUserText( + OmniboxView::StripJavascriptSchemas(UTF8ToUTF16(url.spec()))); + return; + } browser_->GetSelectedTabContents()->OpenURL(url, GURL(), CURRENT_TAB, PageTransition::TYPED); } diff --git a/chrome/browser/ui/omnibox/omnibox_view.cc b/chrome/browser/ui/omnibox/omnibox_view.cc new file mode 100644 index 0000000..533e4e4 --- /dev/null +++ b/chrome/browser/ui/omnibox/omnibox_view.cc @@ -0,0 +1,22 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file defines helper functions shared by the various implementations +// of OmniboxView. + +#include "chrome/browser/ui/omnibox/omnibox_view.h" + +#include "base/string_util.h" +#include "base/string16.h" +#include "base/utf_string_conversions.h" + +string16 OmniboxView::StripJavascriptSchemas(const string16& text) { + const string16 kJsPrefix(ASCIIToUTF16(chrome::kJavaScriptScheme) + + ASCIIToUTF16(":")); + string16 out(text); + while (StartsWith(out, kJsPrefix, false)) + TrimWhitespace(out.substr(kJsPrefix.length()), TRIM_LEADING, &out); + return out; +} + diff --git a/chrome/browser/ui/omnibox/omnibox_view.h b/chrome/browser/ui/omnibox/omnibox_view.h index 7a59433..4ad9319 100644 --- a/chrome/browser/ui/omnibox/omnibox_view.h +++ b/chrome/browser/ui/omnibox/omnibox_view.h @@ -15,8 +15,11 @@ #include <string> #include "base/string16.h" +#include "base/string_util.h" +#include "base/utf_string_conversions.h" #include "chrome/browser/autocomplete/autocomplete_match.h" #include "content/common/page_transition_types.h" +#include "content/common/url_constants.h" #include "ui/gfx/native_widget_types.h" #include "webkit/glue/window_open_disposition.h" @@ -184,6 +187,10 @@ class OmniboxView { virtual int OnPerformDrop(const views::DropTargetEvent& event) = 0; #endif + // Returns a string with any leading javascript schemas stripped from the + // input text. + static string16 StripJavascriptSchemas(const string16& text); + virtual ~OmniboxView() {} }; diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_win.cc b/chrome/browser/ui/views/omnibox/omnibox_view_win.cc index 1096528..0817323 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_win.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_view_win.cc @@ -958,8 +958,10 @@ int OmniboxViewWin::OnPerformDropImpl(const views::DropTargetEvent& event, GURL url; string16 title; if (data.GetURLAndTitle(&url, &title)) { - SetUserText(UTF8ToWide(url.spec())); - model()->AcceptInput(CURRENT_TAB, true); + string16 text(StripJavascriptSchemas(UTF8ToUTF16(url.spec()))); + SetUserText(text); + if (url.spec().length() == text.length()) + model()->AcceptInput(CURRENT_TAB, true); return CopyOrLinkDragOperation(event.source_operations()); } } else if (data.HasString()) { @@ -2356,14 +2358,13 @@ string16 OmniboxViewWin::GetClipboardText() const { ui::Clipboard::BUFFER_STANDARD)) { string16 text; clipboard->ReadText(ui::Clipboard::BUFFER_STANDARD, &text); - // Note: Unlike in the find popup and textfield view, here we completely // remove whitespace strings containing newlines. We assume users are // most likely pasting in URLs that may have been split into multiple // lines in terminals, email programs, etc., and so linebreaks indicate // completely bogus whitespace that would just cause the input to be // invalid. - return CollapseWhitespace(text, true); + return CollapseWhitespace(StripJavascriptSchemas(text), true); } // Try bookmark format. @@ -2380,7 +2381,7 @@ string16 OmniboxViewWin::GetClipboardText() const { // pass resulting url string through GURL to normalize GURL url(url_str); if (url.is_valid()) - return UTF8ToWide(url.spec()); + return StripJavascriptSchemas(UTF8ToUTF16(url.spec())); } return string16(); diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 61ae563..850255f 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -2835,6 +2835,7 @@ 'browser/ui/omnibox/location_bar.h', 'browser/ui/omnibox/location_bar_util.cc', 'browser/ui/omnibox/location_bar_util.h', + 'browser/ui/omnibox/omnibox_view.cc', 'browser/ui/omnibox/omnibox_view.h', 'browser/ui/options/options_util.cc', 'browser/ui/options/options_util.h', |