| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #include "chrome/browser/ui/search_engines/search_engine_tab_helper.h" | 5 #include "chrome/browser/ui/search_engines/search_engine_tab_helper.h" |
| 6 | 6 |
| 7 #include "chrome/browser/profiles/profile.h" | 7 #include "chrome/browser/profiles/profile.h" |
| 8 #include "chrome/browser/search_engines/template_url.h" | 8 #include "chrome/browser/search_engines/template_url.h" |
| 9 #include "chrome/browser/search_engines/template_url_fetcher.h" | 9 #include "chrome/browser/search_engines/template_url_fetcher.h" |
| 10 #include "chrome/browser/search_engines/template_url_service.h" | 10 #include "chrome/browser/search_engines/template_url_service.h" |
| 11 #include "chrome/browser/search_engines/template_url_service_factory.h" | 11 #include "chrome/browser/search_engines/template_url_service_factory.h" |
| 12 #include "chrome/browser/ui/search_engines/template_url_fetcher_ui_callbacks.h" | 12 #include "chrome/browser/ui/search_engines/template_url_fetcher_ui_callbacks.h" |
| 13 #include "chrome/common/render_messages.h" | 13 #include "chrome/common/render_messages.h" |
| 14 #include "content/public/browser/favicon_status.h" | 14 #include "content/public/browser/favicon_status.h" |
| 15 #include "content/public/browser/navigation_entry.h" | 15 #include "content/public/browser/navigation_entry.h" |
| 16 #include "content/public/browser/web_contents.h" | 16 #include "content/public/browser/web_contents.h" |
| 17 #include "content/public/common/frame_navigate_params.h" | 17 #include "content/public/common/frame_navigate_params.h" |
| 18 | 18 |
| 19 using content::NavigationEntry; |
| 19 using content::WebContents; | 20 using content::WebContents; |
| 20 | 21 |
| 21 namespace { | 22 namespace { |
| 22 | 23 |
| 23 // Returns true if the entry's transition type is FORM_SUBMIT. | 24 // Returns true if the entry's transition type is FORM_SUBMIT. |
| 24 bool IsFormSubmit(const content::NavigationEntry* entry) { | 25 bool IsFormSubmit(const NavigationEntry* entry) { |
| 25 return (content::PageTransitionStripQualifier(entry->GetTransitionType()) == | 26 return (content::PageTransitionStripQualifier(entry->GetTransitionType()) == |
| 26 content::PAGE_TRANSITION_FORM_SUBMIT); | 27 content::PAGE_TRANSITION_FORM_SUBMIT); |
| 27 } | 28 } |
| 28 | 29 |
| 29 } // namespace | 30 } // namespace |
| 30 | 31 |
| 31 SearchEngineTabHelper::SearchEngineTabHelper(WebContents* web_contents) | 32 SearchEngineTabHelper::SearchEngineTabHelper(WebContents* web_contents) |
| 32 : content::WebContentsObserver(web_contents) { | 33 : content::WebContentsObserver(web_contents) { |
| 33 DCHECK(web_contents); | 34 DCHECK(web_contents); |
| 34 } | 35 } |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 case search_provider::EXPLICIT_PROVIDER: | 85 case search_provider::EXPLICIT_PROVIDER: |
| 85 provider_type = TemplateURLFetcher::EXPLICIT_PROVIDER; | 86 provider_type = TemplateURLFetcher::EXPLICIT_PROVIDER; |
| 86 break; | 87 break; |
| 87 | 88 |
| 88 default: | 89 default: |
| 89 NOTREACHED(); | 90 NOTREACHED(); |
| 90 return; | 91 return; |
| 91 } | 92 } |
| 92 | 93 |
| 93 const NavigationController& controller = web_contents()->GetController(); | 94 const NavigationController& controller = web_contents()->GetController(); |
| 94 const content::NavigationEntry* entry = controller.GetLastCommittedEntry(); | 95 const NavigationEntry* entry = controller.GetLastCommittedEntry(); |
| 95 DCHECK(entry); | 96 DCHECK(entry); |
| 96 | 97 |
| 97 const content::NavigationEntry* base_entry = entry; | 98 const NavigationEntry* base_entry = entry; |
| 98 if (IsFormSubmit(base_entry)) { | 99 if (IsFormSubmit(base_entry)) { |
| 99 // If the current page is a form submit, find the last page that was not | 100 // If the current page is a form submit, find the last page that was not |
| 100 // a form submit and use its url to generate the keyword from. | 101 // a form submit and use its url to generate the keyword from. |
| 101 int index = controller.last_committed_entry_index() - 1; | 102 int index = controller.last_committed_entry_index() - 1; |
| 102 while (index >= 0 && IsFormSubmit(controller.GetEntryAtIndex(index))) | 103 while (index >= 0 && IsFormSubmit(controller.GetEntryAtIndex(index))) |
| 103 index--; | 104 index--; |
| 104 if (index >= 0) | 105 if (index >= 0) |
| 105 base_entry = controller.GetEntryAtIndex(index); | 106 base_entry = controller.GetEntryAtIndex(index); |
| 106 else | 107 else |
| 107 base_entry = NULL; | 108 base_entry = NULL; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 return; | 142 return; |
| 142 | 143 |
| 143 const NavigationController& controller = web_contents()->GetController(); | 144 const NavigationController& controller = web_contents()->GetController(); |
| 144 int last_index = controller.last_committed_entry_index(); | 145 int last_index = controller.last_committed_entry_index(); |
| 145 // When there was no previous page, the last index will be 0. This is | 146 // When there was no previous page, the last index will be 0. This is |
| 146 // normally due to a form submit that opened in a new tab. | 147 // normally due to a form submit that opened in a new tab. |
| 147 // TODO(brettw) bug 916126: we should support keywords when form submits | 148 // TODO(brettw) bug 916126: we should support keywords when form submits |
| 148 // happen in new tabs. | 149 // happen in new tabs. |
| 149 if (last_index <= 0) | 150 if (last_index <= 0) |
| 150 return; | 151 return; |
| 151 const content::NavigationEntry* previous_entry = | 152 const NavigationEntry* previous_entry = |
| 152 controller.GetEntryAtIndex(last_index - 1); | 153 controller.GetEntryAtIndex(last_index - 1); |
| 153 if (IsFormSubmit(previous_entry)) { | 154 if (IsFormSubmit(previous_entry)) { |
| 154 // Only generate a keyword if the previous page wasn't itself a form | 155 // Only generate a keyword if the previous page wasn't itself a form |
| 155 // submit. | 156 // submit. |
| 156 return; | 157 return; |
| 157 } | 158 } |
| 158 | 159 |
| 159 GURL keyword_url = previous_entry->GetUserTypedURL().is_valid() ? | 160 GURL keyword_url = previous_entry->GetUserTypedURL().is_valid() ? |
| 160 previous_entry->GetUserTypedURL() : previous_entry->GetURL(); | 161 previous_entry->GetUserTypedURL() : previous_entry->GetURL(); |
| 161 string16 keyword = | 162 string16 keyword = |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 // or the favicon url wasn't obtained before the load started. This assumes | 202 // or the favicon url wasn't obtained before the load started. This assumes |
| 202 // the later. | 203 // the later. |
| 203 // TODO(sky): Need a way to set the favicon that doesn't involve generating | 204 // TODO(sky): Need a way to set the favicon that doesn't involve generating |
| 204 // its url. | 205 // its url. |
| 205 new_url->SetFaviconURL( | 206 new_url->SetFaviconURL( |
| 206 TemplateURL::GenerateFaviconURL(params.referrer.url)); | 207 TemplateURL::GenerateFaviconURL(params.referrer.url)); |
| 207 } | 208 } |
| 208 new_url->set_safe_for_autoreplace(true); | 209 new_url->set_safe_for_autoreplace(true); |
| 209 url_service->Add(new_url); | 210 url_service->Add(new_url); |
| 210 } | 211 } |
| OLD | NEW |