summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorshess@chromium.org <shess@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-09 15:41:51 +0000
committershess@chromium.org <shess@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-09 15:41:51 +0000
commit5942dc32a1d9dc32aa208452ec72f8c076153f63 (patch)
tree511de1b51abf62a8a9f50622db9b2193a2a43e5a /chrome
parent12c3b59ecb82bded702780696dffc15c6955a5f7 (diff)
downloadchromium_src-5942dc32a1d9dc32aa208452ec72f8c076153f63.zip
chromium_src-5942dc32a1d9dc32aa208452ec72f8c076153f63.tar.gz
chromium_src-5942dc32a1d9dc32aa208452ec72f8c076153f63.tar.bz2
Don't allow drag or click on location icon when editing in omnibox.
After editing the omnibox, clicking the location icon would provide the page info for the page being shown, though the rest of the omnibox might be inconsistent with that page. Exposes the logic used by AutocompleteEditView::GetIcon() to determine when there's a real URL for page-info (or drag). BUG=none TEST=Navigate to a page. Click location icon to see page info. Edit the omnibox, click should not show page info. Review URL: http://codereview.chromium.org/1594012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@44087 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/autocomplete/autocomplete_edit_view.h4
-rw-r--r--chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc6
-rw-r--r--chrome/browser/autocomplete/autocomplete_edit_view_gtk.h1
-rw-r--r--chrome/browser/autocomplete/autocomplete_edit_view_mac.h1
-rw-r--r--chrome/browser/autocomplete/autocomplete_edit_view_mac.mm6
-rw-r--r--chrome/browser/autocomplete/autocomplete_edit_view_win.cc6
-rw-r--r--chrome/browser/autocomplete/autocomplete_edit_view_win.h1
-rw-r--r--chrome/browser/cocoa/autocomplete_text_field_unittest.mm8
-rw-r--r--chrome/browser/cocoa/location_bar_view_mac.h3
-rw-r--r--chrome/browser/cocoa/location_bar_view_mac.mm14
-rw-r--r--chrome/browser/gtk/location_bar_view_gtk.cc5
-rw-r--r--chrome/browser/gtk/location_bar_view_gtk.h3
-rw-r--r--chrome/browser/location_bar.h1
-rw-r--r--chrome/browser/views/location_bar_view.cc9
-rw-r--r--chrome/browser/views/location_bar_view.h3
-rw-r--r--chrome/test/test_location_bar.h3
16 files changed, 63 insertions, 11 deletions
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view.h b/chrome/browser/autocomplete/autocomplete_edit_view.h
index e29b19b..0d4c230 100644
--- a/chrome/browser/autocomplete/autocomplete_edit_view.h
+++ b/chrome/browser/autocomplete/autocomplete_edit_view.h
@@ -59,6 +59,10 @@ class AutocompleteEditView {
// browser, or just whatever the user has currently typed.
virtual std::wstring GetText() const = 0;
+ // |true| if the user is in the process of editing the field, or if
+ // the field is empty.
+ virtual bool IsEditingOrEmpty() const = 0;
+
// Returns the resource ID of the icon to show for the current text.
virtual int GetIcon() const = 0;
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc b/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc
index 35144963..207dd0d 100644
--- a/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc
@@ -387,8 +387,12 @@ std::wstring AutocompleteEditViewGtk::GetText() const {
return out;
}
+bool AutocompleteEditViewGtk::IsEditingOrEmpty() const {
+ return (model_->user_input_in_progress() || model_->show_search_hint());
+}
+
int AutocompleteEditViewGtk::GetIcon() const {
- return (model_->user_input_in_progress() || model_->show_search_hint()) ?
+ return IsEditingOrEmpty() ?
AutocompleteMatch::TypeToIcon(model_->CurrentTextType()) :
toolbar_model_->GetIcon();
}
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_gtk.h b/chrome/browser/autocomplete/autocomplete_edit_view_gtk.h
index 978f3d7..69bc3be 100644
--- a/chrome/browser/autocomplete/autocomplete_edit_view_gtk.h
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_gtk.h
@@ -80,6 +80,7 @@ class AutocompleteEditViewGtk : public AutocompleteEditView,
virtual std::wstring GetText() const;
+ virtual bool IsEditingOrEmpty() const;
virtual int GetIcon() const;
virtual void SetUserText(const std::wstring& text) {
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_mac.h b/chrome/browser/autocomplete/autocomplete_edit_view_mac.h
index 8539cae..a810465 100644
--- a/chrome/browser/autocomplete/autocomplete_edit_view_mac.h
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_mac.h
@@ -49,6 +49,7 @@ class AutocompleteEditViewMac : public AutocompleteEditView,
virtual std::wstring GetText() const;
+ virtual bool IsEditingOrEmpty() const;
virtual int GetIcon() const;
virtual void SetUserText(const std::wstring& text) {
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_mac.mm b/chrome/browser/autocomplete/autocomplete_edit_view_mac.mm
index fc5bbef..ee502cb 100644
--- a/chrome/browser/autocomplete/autocomplete_edit_view_mac.mm
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_mac.mm
@@ -266,8 +266,12 @@ std::wstring AutocompleteEditViewMac::GetText() const {
return base::SysNSStringToWide([field_ stringValue]);
}
+bool AutocompleteEditViewMac::IsEditingOrEmpty() const {
+ return (model_->user_input_in_progress() || model_->show_search_hint());
+}
+
int AutocompleteEditViewMac::GetIcon() const {
- return (model_->user_input_in_progress() || model_->show_search_hint()) ?
+ return IsEditingOrEmpty() ?
AutocompleteMatch::TypeToIcon(model_->CurrentTextType()) :
toolbar_model_->GetIcon();
}
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_win.cc b/chrome/browser/autocomplete/autocomplete_edit_view_win.cc
index 87c41f9..46639ab 100644
--- a/chrome/browser/autocomplete/autocomplete_edit_view_win.cc
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_win.cc
@@ -599,8 +599,12 @@ std::wstring AutocompleteEditViewWin::GetText() const {
return str;
}
+bool AutocompleteEditViewWin::IsEditingOrEmpty() const {
+ return (model_->user_input_in_progress() || model_->show_search_hint());
+}
+
int AutocompleteEditViewWin::GetIcon() const {
- return (model_->user_input_in_progress() || model_->show_search_hint()) ?
+ return IsEditingOrEmpty() ?
AutocompleteMatch::TypeToIcon(model_->CurrentTextType()) :
toolbar_model_->GetIcon();
}
diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_win.h b/chrome/browser/autocomplete/autocomplete_edit_view_win.h
index 718ba2a..82762ae 100644
--- a/chrome/browser/autocomplete/autocomplete_edit_view_win.h
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_win.h
@@ -91,6 +91,7 @@ class AutocompleteEditViewWin
virtual std::wstring GetText() const;
+ virtual bool IsEditingOrEmpty() const;
virtual int GetIcon() const;
virtual void SetUserText(const std::wstring& text) {
diff --git a/chrome/browser/cocoa/autocomplete_text_field_unittest.mm b/chrome/browser/cocoa/autocomplete_text_field_unittest.mm
index f82fca7..b6f044f 100644
--- a/chrome/browser/cocoa/autocomplete_text_field_unittest.mm
+++ b/chrome/browser/cocoa/autocomplete_text_field_unittest.mm
@@ -27,9 +27,11 @@ class MockLocationIconView : public LocationBarViewMac::LocationIconView {
MockLocationIconView(LocationBarViewMac* owner)
: LocationBarViewMac::LocationIconView(owner) {}
- // |LocationBarViewMac::LocationIconView::GetDragPasteboard()|
- // expects things to be more initialized than they will be, and
- // will crash if it is called.
+ // |LocationBarViewMac::LocationIconView| dragging support needs
+ // more setup than this test provides.
+ bool IsDraggable() {
+ return false;
+ }
virtual NSPasteboard* GetDragPasteboard() {
return [NSPasteboard pasteboardWithUniqueName];
}
diff --git a/chrome/browser/cocoa/location_bar_view_mac.h b/chrome/browser/cocoa/location_bar_view_mac.h
index 7eee821..ebff104 100644
--- a/chrome/browser/cocoa/location_bar_view_mac.h
+++ b/chrome/browser/cocoa/location_bar_view_mac.h
@@ -61,6 +61,9 @@ class LocationBarViewMac : public AutocompleteEditController,
virtual void InvalidatePageActions();
virtual void SaveStateToContents(TabContents* contents);
virtual void Revert();
+ virtual const AutocompleteEditView* location_entry() const {
+ return edit_view_.get();
+ }
virtual AutocompleteEditView* location_entry() {
return edit_view_.get();
}
diff --git a/chrome/browser/cocoa/location_bar_view_mac.mm b/chrome/browser/cocoa/location_bar_view_mac.mm
index c2c10dd..6a7afba 100644
--- a/chrome/browser/cocoa/location_bar_view_mac.mm
+++ b/chrome/browser/cocoa/location_bar_view_mac.mm
@@ -601,8 +601,11 @@ LocationBarViewMac::LocationIconView::LocationIconView(
LocationBarViewMac::LocationIconView::~LocationIconView() {}
void LocationBarViewMac::LocationIconView::OnMousePressed(NSRect bounds) {
- // TODO(shess): Only allow click if page-info makes sense.
- // http://codereview.chromium.org/1594012
+ // Do not show page info if the user has been editing the location
+ // bar, or the location bar is at the NTP.
+ if (owner_->location_entry()->IsEditingOrEmpty())
+ return;
+
TabContents* tab = owner_->GetTabContents();
NavigationEntry* nav_entry = tab->controller().GetActiveEntry();
if (!nav_entry) {
@@ -613,8 +616,11 @@ void LocationBarViewMac::LocationIconView::OnMousePressed(NSRect bounds) {
}
bool LocationBarViewMac::LocationIconView::IsDraggable() {
- // TODO(shess): Only allow drag if there's an URL to drag.
- // http://codereview.chromium.org/1594012
+ // Do not drag if the user has been editing the location bar, or the
+ // location bar is at the NTP.
+ if (owner_->location_entry()->IsEditingOrEmpty())
+ return false;
+
return true;
}
diff --git a/chrome/browser/gtk/location_bar_view_gtk.cc b/chrome/browser/gtk/location_bar_view_gtk.cc
index 5c6ed91..733dade 100644
--- a/chrome/browser/gtk/location_bar_view_gtk.cc
+++ b/chrome/browser/gtk/location_bar_view_gtk.cc
@@ -890,6 +890,11 @@ void LocationBarViewGtk::ShowFirstRunBubbleInternal(bool use_OEM_bubble) {
gboolean LocationBarViewGtk::OnIconReleased(GtkWidget* sender,
GdkEventButton* event) {
+ // Do not show page info if the user has been editing the location
+ // bar, or the location bar is at the NTP.
+ if (location_entry()->IsEditingOrEmpty())
+ return false;
+
// (0,0) event coordinates indicates that the release came at the end of
// a drag.
if (event->button != 1 || (event->x == 0 && event->y == 0))
diff --git a/chrome/browser/gtk/location_bar_view_gtk.h b/chrome/browser/gtk/location_bar_view_gtk.h
index adb47b0..aac1ad1 100644
--- a/chrome/browser/gtk/location_bar_view_gtk.h
+++ b/chrome/browser/gtk/location_bar_view_gtk.h
@@ -110,6 +110,9 @@ class LocationBarViewGtk : public AutocompleteEditController,
virtual void InvalidatePageActions();
virtual void SaveStateToContents(TabContents* contents);
virtual void Revert();
+ virtual const AutocompleteEditView* location_entry() const {
+ return location_entry_.get();
+ }
virtual AutocompleteEditView* location_entry() {
return location_entry_.get();
}
diff --git a/chrome/browser/location_bar.h b/chrome/browser/location_bar.h
index 29bfddc..a0afe93 100644
--- a/chrome/browser/location_bar.h
+++ b/chrome/browser/location_bar.h
@@ -68,6 +68,7 @@ class LocationBar {
virtual void Revert() = 0;
// Returns a pointer to the text entry view.
+ virtual const AutocompleteEditView* location_entry() const = 0;
virtual AutocompleteEditView* location_entry() = 0;
// Returns a pointer to the testing interface.
diff --git a/chrome/browser/views/location_bar_view.cc b/chrome/browser/views/location_bar_view.cc
index 35b8f8e..324731f 100644
--- a/chrome/browser/views/location_bar_view.cc
+++ b/chrome/browser/views/location_bar_view.cc
@@ -895,7 +895,8 @@ int LocationBarView::GetDragOperations(views::View* sender,
const gfx::Point& p) {
DCHECK(sender == &location_icon_view_);
TabContents* tab_contents = delegate_->GetTabContents();
- return (tab_contents && tab_contents->GetURL().is_valid()) ?
+ return (tab_contents && tab_contents->GetURL().is_valid() &&
+ !location_entry()->IsEditingOrEmpty()) ?
(DragDropTypes::DRAG_COPY | DragDropTypes::DRAG_LINK) :
DragDropTypes::DRAG_NONE;
}
@@ -928,6 +929,12 @@ void LocationBarView::LocationIconView::OnMouseReleased(
bool canceled) {
if (canceled || !HitTest(event.location()))
return;
+
+ // Do not show page info if the user has been editing the location
+ // bar, or the location bar is at the NTP.
+ if (parent_->location_entry()->IsEditingOrEmpty())
+ return;
+
TabContents* tab = parent_->GetTabContents();
NavigationEntry* nav_entry = tab->controller().GetActiveEntry();
if (!nav_entry) {
diff --git a/chrome/browser/views/location_bar_view.h b/chrome/browser/views/location_bar_view.h
index 306a490..dee0ee2 100644
--- a/chrome/browser/views/location_bar_view.h
+++ b/chrome/browser/views/location_bar_view.h
@@ -185,6 +185,9 @@ class LocationBarView : public LocationBar,
virtual void InvalidatePageActions();
virtual void SaveStateToContents(TabContents* contents);
virtual void Revert();
+ virtual const AutocompleteEditView* location_entry() const {
+ return location_entry_.get();
+ }
virtual AutocompleteEditView* location_entry() {
return location_entry_.get();
}
diff --git a/chrome/test/test_location_bar.h b/chrome/test/test_location_bar.h
index f257d1ee..131af32 100644
--- a/chrome/test/test_location_bar.h
+++ b/chrome/test/test_location_bar.h
@@ -42,6 +42,9 @@ class TestLocationBar : public LocationBar {
virtual void InvalidatePageActions() {}
virtual void SaveStateToContents(TabContents* contents) {}
virtual void Revert() {}
+ virtual const AutocompleteEditView* location_entry() const {
+ return NULL;
+ }
virtual AutocompleteEditView* location_entry() {
return NULL;
}