Index: chrome/browser/ui/app_list/search/answer_card/answer_card_search_provider.cc |
diff --git a/chrome/browser/ui/app_list/search/answer_card/answer_card_search_provider.cc b/chrome/browser/ui/app_list/search/answer_card/answer_card_search_provider.cc |
index c2c29ec0ba6b35783ca75c42c34e348b413e90cb..ede9eeaf735ea8a8a665b39e6151b7f117d6cf6a 100644 |
--- a/chrome/browser/ui/app_list/search/answer_card/answer_card_search_provider.cc |
+++ b/chrome/browser/ui/app_list/search/answer_card/answer_card_search_provider.cc |
@@ -17,10 +17,6 @@ |
#include "components/omnibox/browser/autocomplete_input.h" |
#include "components/omnibox/browser/autocomplete_match.h" |
#include "components/search_engines/template_url_service.h" |
-#include "content/public/browser/navigation_handle.h" |
-#include "content/public/browser/page_navigator.h" |
-#include "net/http/http_response_headers.h" |
-#include "net/http/http_status_code.h" |
#include "ui/app_list/app_list_features.h" |
#include "ui/app_list/app_list_model.h" |
#include "ui/app_list/search_box_model.h" |
@@ -38,10 +34,6 @@ enum class SearchAnswerRequestResult { |
REQUEST_RESULT_MAX = 5 |
}; |
-constexpr char kSearchAnswerHasResult[] = "SearchAnswer-HasResult"; |
-constexpr char kSearchAnswerIssuedQuery[] = "SearchAnswer-IssuedQuery"; |
-constexpr char kSearchAnswerTitle[] = "SearchAnswer-Title"; |
- |
void RecordRequestResult(SearchAnswerRequestResult request_result) { |
UMA_HISTOGRAM_ENUMERATION("SearchAnswer.RequestResult", request_result, |
SearchAnswerRequestResult::REQUEST_RESULT_MAX); |
@@ -116,33 +108,13 @@ void AnswerCardSearchProvider::UpdatePreferredSize(const gfx::Size& pref_size) { |
} |
} |
-content::WebContents* AnswerCardSearchProvider::OpenURLFromTab( |
- const content::OpenURLParams& params) { |
- // Open the user-clicked link in the browser taking into account the requested |
- // disposition. |
- chrome::NavigateParams new_tab_params(profile_, params.url, |
- params.transition); |
- |
- new_tab_params.disposition = params.disposition; |
- |
- if (params.disposition == WindowOpenDisposition::NEW_BACKGROUND_TAB) { |
- // When the user asks to open a link as a background tab, we show an |
- // activated window with the new activated tab after the user closes the |
- // launcher. So it's "background" relative to the launcher itself. |
- new_tab_params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; |
- new_tab_params.window_action = chrome::NavigateParams::SHOW_WINDOW_INACTIVE; |
- } |
- |
- chrome::Navigate(&new_tab_params); |
- |
- base::RecordAction(base::UserMetricsAction("SearchAnswer_OpenedUrl")); |
- |
- return new_tab_params.target_contents; |
-} |
- |
void AnswerCardSearchProvider::DidFinishNavigation( |
- content::NavigationHandle* navigation_handle) { |
- if (navigation_handle->GetURL() != current_request_url_) { |
+ const GURL& url, |
+ bool has_error, |
+ bool has_answer_card, |
+ const std::string& result_title, |
+ const std::string& issued_query) { |
+ if (url != current_request_url_) { |
// TODO(vadimt): Remove this and similar logging once testing is complete if |
// we think this is not useful after release or happens too frequently. |
VLOG(1) << "DidFinishNavigation: Another request started"; |
@@ -152,29 +124,27 @@ void AnswerCardSearchProvider::DidFinishNavigation( |
} |
VLOG(1) << "DidFinishNavigation: Latest request completed"; |
- if (!navigation_handle->HasCommitted() || navigation_handle->IsErrorPage() || |
- !navigation_handle->IsInMainFrame()) { |
- LOG(ERROR) << "Failed to navigate: HasCommitted=" |
- << navigation_handle->HasCommitted() |
- << ", IsErrorPage=" << navigation_handle->IsErrorPage() |
- << ", IsInMainFrame=" << navigation_handle->IsInMainFrame(); |
+ if (has_error) { |
RecordRequestResult( |
SearchAnswerRequestResult::REQUEST_RESULT_REQUEST_FAILED); |
return; |
} |
if (!features::IsAnswerCardDarkRunEnabled()) { |
- if (!ParseResponseHeaders(navigation_handle->GetResponseHeaders())) { |
+ if (!has_answer_card || result_title.empty()) { |
RecordRequestResult(SearchAnswerRequestResult::REQUEST_RESULT_NO_ANSWER); |
return; |
} |
+ result_title_ = result_title; |
+ if (!issued_query.empty()) |
+ result_url_ = GetResultUrl(base::UTF8ToUTF16(issued_query)); |
} else { |
// In the dark run mode, every other "server response" contains a card. |
dark_run_received_answer_ = !dark_run_received_answer_; |
if (!dark_run_received_answer_) |
return; |
// SearchResult requires a non-empty id. This "url" will never be opened. |
- result_url_ = "some string"; |
+ result_url_ = "https://www.google.com/?q=something"; |
} |
received_answer_ = true; |
@@ -238,44 +208,6 @@ void AnswerCardSearchProvider::OnResultAvailable(bool is_available) { |
SwapResults(&results); |
} |
-bool AnswerCardSearchProvider::ParseResponseHeaders( |
- const net::HttpResponseHeaders* headers) { |
- if (!headers) { |
- LOG(ERROR) << "Failed to parse response headers: no headers"; |
- return false; |
- } |
- if (headers->response_code() != net::HTTP_OK) { |
- LOG(ERROR) << "Failed to parse response headers: response code=" |
- << headers->response_code(); |
- return false; |
- } |
- if (!headers->HasHeaderValue(kSearchAnswerHasResult, "true")) { |
- LOG(ERROR) << "Failed to parse response headers: " << kSearchAnswerHasResult |
- << " header != true"; |
- return false; |
- } |
- if (!headers->GetNormalizedHeader(kSearchAnswerTitle, &result_title_)) { |
- LOG(ERROR) << "Failed to parse response headers: " << kSearchAnswerTitle |
- << " header is not present"; |
- return false; |
- } |
- |
- std::string issued_query; |
- // TODO(749320): Make the header mandatory once the production server starts |
- // serving it. |
- if (headers->GetNormalizedHeader(kSearchAnswerIssuedQuery, &issued_query)) { |
- // The header contains the autocompleted query that corresponds to the card |
- // contents. Use it for the open-URL, and for deduplication with the omnibox |
- // search results. |
- result_url_ = GetResultUrl(base::UTF8ToUTF16(issued_query)); |
- } else { |
- VLOG(1) << "Warning: " << kSearchAnswerIssuedQuery |
- << " header is not present"; |
- } |
- |
- return true; |
-} |
- |
std::string AnswerCardSearchProvider::GetResultUrl( |
const base::string16& query) const { |
return template_url_service_->GetDefaultSearchProvider() |