Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(210)

Side by Side Diff: chrome/browser/ui/omnibox/omnibox_view.cc

Issue 20501002: Adds paste function to searchbox api and handles paste event on fakebox (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nits Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file defines helper functions shared by the various implementations 5 // This file defines helper functions shared by the various implementations
6 // of OmniboxView. 6 // of OmniboxView.
7 7
8 #include "chrome/browser/ui/omnibox/omnibox_view.h" 8 #include "chrome/browser/ui/omnibox/omnibox_view.h"
9 9
10 #include "base/strings/string16.h" 10 #include "base/strings/string16.h"
11 #include "base/strings/string_util.h" 11 #include "base/strings/string_util.h"
12 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
13 #include "chrome/browser/autocomplete/autocomplete_match.h" 13 #include "chrome/browser/autocomplete/autocomplete_match.h"
14 #include "ui/base/clipboard/clipboard.h" 14 #include "ui/base/clipboard/clipboard.h"
15 15
16 // static 16 // static
17 string16 OmniboxView::StripJavascriptSchemas(const string16& text) { 17 string16 OmniboxView::StripJavascriptSchemas(const string16& text) {
18 const string16 kJsPrefix(ASCIIToUTF16(chrome::kJavaScriptScheme) + 18 const string16 kJsPrefix(ASCIIToUTF16(chrome::kJavaScriptScheme) +
19 ASCIIToUTF16(":")); 19 ASCIIToUTF16(":"));
20 string16 out(text); 20 string16 out(text);
21 while (StartsWith(out, kJsPrefix, false)) 21 while (StartsWith(out, kJsPrefix, false))
22 TrimWhitespace(out.substr(kJsPrefix.length()), TRIM_LEADING, &out); 22 TrimWhitespace(out.substr(kJsPrefix.length()), TRIM_LEADING, &out);
23 return out; 23 return out;
24 } 24 }
25 25
26 // static 26 // static
27 string16 OmniboxView::SanitizeTextForPaste(const string16& text) {
28 // Check for non-newline whitespace; if found, collapse whitespace runs down
29 // to single spaces.
30 // TODO(shess): It may also make sense to ignore leading or
31 // trailing whitespace when making this determination.
32 for (size_t i = 0; i < text.size(); ++i) {
33 if (IsWhitespace(text[i]) && text[i] != '\n' && text[i] != '\r') {
34 const string16 collapsed = CollapseWhitespace(text, false);
35 // If the user is pasting all-whitespace, paste a single space
36 // rather than nothing, since pasting nothing feels broken.
37 return collapsed.empty() ?
38 ASCIIToUTF16(" ") : StripJavascriptSchemas(collapsed);
39 }
40 }
41
42 // Otherwise, all whitespace is newlines; remove it entirely.
43 return StripJavascriptSchemas(CollapseWhitespace(text, true));
44 }
45
46 // static
27 string16 OmniboxView::GetClipboardText() { 47 string16 OmniboxView::GetClipboardText() {
28 // Try text format. 48 // Try text format.
29 ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); 49 ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
30 if (clipboard->IsFormatAvailable(ui::Clipboard::GetPlainTextWFormatType(), 50 if (clipboard->IsFormatAvailable(ui::Clipboard::GetPlainTextWFormatType(),
31 ui::Clipboard::BUFFER_STANDARD)) { 51 ui::Clipboard::BUFFER_STANDARD)) {
32 string16 text; 52 string16 text;
33 clipboard->ReadText(ui::Clipboard::BUFFER_STANDARD, &text); 53 clipboard->ReadText(ui::Clipboard::BUFFER_STANDARD, &text);
34 54 return SanitizeTextForPaste(text);
35 // If the input contains non-newline whitespace, treat it as
36 // search data and convert newlines to spaces. For instance, a
37 // street address.
38 // TODO(shess): It may also make sense to ignore leading or
39 // trailing whitespace when making this determination.
40 for (size_t i = 0; i < text.size(); ++i) {
41 if (IsWhitespace(text[i]) && text[i] != '\n' && text[i] != '\r') {
42 const string16 collapsed = CollapseWhitespace(text, false);
43 // If the user is pasting all-whitespace, paste a single space
44 // rather than nothing, since pasting nothing feels broken.
45 return collapsed.empty() ?
46 ASCIIToUTF16(" ") : StripJavascriptSchemas(collapsed);
47 }
48 }
49
50 // Otherwise, the only whitespace in |text| is newlines. Remove
51 // these entirely, because users are most likely pasting URLs
52 // split into multiple lines by terminals, email programs, etc.
53 return StripJavascriptSchemas(CollapseWhitespace(text, true));
54 } 55 }
55 56
56 // Try bookmark format. 57 // Try bookmark format.
57 // 58 //
58 // It is tempting to try bookmark format first, but the URL we get out of a 59 // It is tempting to try bookmark format first, but the URL we get out of a
59 // bookmark has been cannonicalized via GURL. This means if a user copies 60 // bookmark has been cannonicalized via GURL. This means if a user copies
60 // and pastes from the URL bar to itself, the text will get fixed up and 61 // and pastes from the URL bar to itself, the text will get fixed up and
61 // cannonicalized, which is not what the user expects. By pasting in this 62 // cannonicalized, which is not what the user expects. By pasting in this
62 // order, we are sure to paste what the user copied. 63 // order, we are sure to paste what the user copied.
63 if (clipboard->IsFormatAvailable(ui::Clipboard::GetUrlWFormatType(), 64 if (clipboard->IsFormatAvailable(ui::Clipboard::GetUrlWFormatType(),
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 // |profile| can be NULL in tests. 151 // |profile| can be NULL in tests.
151 if (profile) 152 if (profile)
152 model_.reset(new OmniboxEditModel(this, controller, profile)); 153 model_.reset(new OmniboxEditModel(this, controller, profile));
153 } 154 }
154 155
155 void OmniboxView::TextChanged() { 156 void OmniboxView::TextChanged() {
156 EmphasizeURLComponents(); 157 EmphasizeURLComponents();
157 if (model_.get()) 158 if (model_.get())
158 model_->OnChanged(); 159 model_->OnChanged();
159 } 160 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/omnibox/omnibox_view.h ('k') | chrome/browser/ui/omnibox/omnibox_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698