Home | History | Annotate | Download | only in omnibox
      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
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/ui/omnibox/omnibox_view.h"
      6 #include "base/message_loop/message_loop.h"
      7 #include "base/strings/string16.h"
      8 #include "base/strings/string_util.h"
      9 #include "base/strings/utf_string_conversions.h"
     10 #include "testing/gtest/include/gtest/gtest.h"
     11 #include "testing/platform_test.h"
     12 #include "ui/base/clipboard/clipboard.h"
     13 #include "ui/base/clipboard/scoped_clipboard_writer.h"
     14 
     15 using base::ASCIIToUTF16;
     16 
     17 namespace {
     18 
     19 class OmniboxViewTest : public PlatformTest {
     20  public:
     21   virtual void TearDown() OVERRIDE {
     22     ui::Clipboard::DestroyClipboardForCurrentThread();
     23   }
     24 
     25  private:
     26   // Windows requires a message loop for clipboard access.
     27   base::MessageLoopForUI message_loop_;
     28 };
     29 
     30 TEST_F(OmniboxViewTest, TestStripSchemasUnsafeForPaste) {
     31   const char* urls[] = {
     32     "http://www.google.com?q=javascript:alert(0)",  // Safe URL.
     33     "javAscript:alert(0)",                          // Unsafe JS URL.
     34     "jaVascript:\njavaScript: alert(0)"             // Single strip unsafe.
     35   };
     36 
     37   const char* expecteds[] = {
     38     "http://www.google.com?q=javascript:alert(0)",  // Safe URL.
     39     "alert(0)",                                     // Unsafe JS URL.
     40     "alert(0)"                                      // Single strip unsafe.
     41   };
     42 
     43   for (size_t i = 0; i < arraysize(urls); i++) {
     44     EXPECT_EQ(ASCIIToUTF16(expecteds[i]),
     45               OmniboxView::StripJavascriptSchemas(ASCIIToUTF16(urls[i])));
     46   }
     47 }
     48 
     49 TEST_F(OmniboxViewTest, SanitizeTextForPaste) {
     50   // Broken URL has newlines stripped.
     51   const base::string16 kWrappedURL(ASCIIToUTF16(
     52       "http://www.chromium.org/developers/testing/chromium-\n"
     53       "build-infrastructure/tour-of-the-chromium-buildbot"));
     54 
     55   const base::string16 kFixedURL(ASCIIToUTF16(
     56       "http://www.chromium.org/developers/testing/chromium-"
     57       "build-infrastructure/tour-of-the-chromium-buildbot"));
     58   EXPECT_EQ(kFixedURL, OmniboxView::SanitizeTextForPaste(kWrappedURL));
     59 
     60   // Multi-line address is converted to a single-line address.
     61   const base::string16 kWrappedAddress(ASCIIToUTF16(
     62       "1600 Amphitheatre Parkway\nMountain View, CA"));
     63 
     64   const base::string16 kFixedAddress(ASCIIToUTF16(
     65       "1600 Amphitheatre Parkway Mountain View, CA"));
     66   EXPECT_EQ(kFixedAddress, OmniboxView::SanitizeTextForPaste(kWrappedAddress));
     67 }
     68 
     69 TEST_F(OmniboxViewTest, GetClipboardText) {
     70   ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
     71 
     72   const base::string16 kPlainText(ASCIIToUTF16("test text"));
     73   const std::string kURL("http://www.example.com/");
     74 
     75   // Can we pull straight text off the clipboard?
     76   {
     77     ui::ScopedClipboardWriter clipboard_writer(clipboard,
     78                                                ui::CLIPBOARD_TYPE_COPY_PASTE);
     79     clipboard_writer.WriteText(kPlainText);
     80   }
     81   EXPECT_EQ(kPlainText, OmniboxView::GetClipboardText());
     82 
     83   // Can we pull a string consists of white-space?
     84   const base::string16 kSpace6(ASCIIToUTF16("      "));
     85   const base::string16 kSpace1(ASCIIToUTF16(" "));
     86   {
     87     ui::ScopedClipboardWriter clipboard_writer(clipboard,
     88                                                ui::CLIPBOARD_TYPE_COPY_PASTE);
     89     clipboard_writer.WriteText(kSpace6);
     90   }
     91   EXPECT_EQ(kSpace1, OmniboxView::GetClipboardText());
     92 
     93   // Does an empty clipboard get empty text?
     94   clipboard->Clear(ui::CLIPBOARD_TYPE_COPY_PASTE);
     95   EXPECT_EQ(base::string16(), OmniboxView::GetClipboardText());
     96 
     97   // Bookmark clipboard apparently not supported on Linux.
     98   // See TODO on ClipboardText.BookmarkTest.
     99 #if !defined(OS_POSIX) || defined(OS_MACOSX)
    100   const base::string16 kTitle(ASCIIToUTF16("The Example Company"));
    101   // Can we pull a bookmark off the clipboard?
    102   {
    103     ui::ScopedClipboardWriter clipboard_writer(clipboard,
    104                                                ui::CLIPBOARD_TYPE_COPY_PASTE);
    105     clipboard_writer.WriteBookmark(kTitle, kURL);
    106   }
    107   EXPECT_EQ(ASCIIToUTF16(kURL), OmniboxView::GetClipboardText());
    108 
    109   // Do we pull text in preference to a bookmark?
    110   {
    111     ui::ScopedClipboardWriter clipboard_writer(clipboard,
    112                                                ui::CLIPBOARD_TYPE_COPY_PASTE);
    113     clipboard_writer.WriteText(kPlainText);
    114     clipboard_writer.WriteBookmark(kTitle, kURL);
    115   }
    116   EXPECT_EQ(kPlainText, OmniboxView::GetClipboardText());
    117 #endif
    118 
    119   // Do we get nothing if there is neither text nor a bookmark?
    120   {
    121     const base::string16 kMarkup(ASCIIToUTF16("<strong>Hi!</string>"));
    122     ui::ScopedClipboardWriter clipboard_writer(clipboard,
    123                                                ui::CLIPBOARD_TYPE_COPY_PASTE);
    124     clipboard_writer.WriteHTML(kMarkup, kURL);
    125   }
    126   EXPECT_TRUE(OmniboxView::GetClipboardText().empty());
    127 }
    128 
    129 }  // namespace
    130