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
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 @@
     // 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 @@
     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 @@
   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..533e4e4b
--- /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..4ad93197 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 @@
   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 @@
     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 @@
                                    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 @@
     // 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',