summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcdn@chromium.org <cdn@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-24 23:43:44 +0000
committercdn@chromium.org <cdn@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-24 23:43:44 +0000
commit067095afacfdf4673bc397b3ca4623d037e7afc7 (patch)
treebed5c9e6b786b1d24289fc9a45431823a73c8903
parentc5f0890eab108b75f3c5207643665ff5c17fb176 (diff)
downloadchromium_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.mm7
-rw-r--r--chrome/browser/ui/cocoa/toolbar/toolbar_controller.mm7
-rw-r--r--chrome/browser/ui/omnibox/omnibox_view.cc22
-rw-r--r--chrome/browser/ui/omnibox/omnibox_view.h7
-rw-r--r--chrome/browser/ui/views/omnibox/omnibox_view_win.cc11
-rw-r--r--chrome/chrome_browser.gypi1
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',