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

Unified Diff: chrome/browser/android/contextualsearch/contextual_search_delegate.cc

Issue 2706333002: [TTS] Add a Java Context linked to existing native (Closed)
Patch Set: DCHECK that the context is created on the browser thread. Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/android/contextualsearch/contextual_search_delegate.cc
diff --git a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
index bde0a2f5594dfb2e5fc30f4954fa134fa1754bab..9847af79f77a7e346ef134e46564a93f726d0117 100644
--- a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
+++ b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
@@ -98,31 +98,54 @@ ContextualSearchDelegate::ContextualSearchDelegate(
ContextualSearchDelegate::~ContextualSearchDelegate() {
}
-void ContextualSearchDelegate::StartSearchTermResolutionRequest(
- const std::string& selection,
- const std::string& home_country,
- content::WebContents* web_contents,
- bool may_send_base_page_url) {
- GatherSurroundingTextWithCallback(
- selection, home_country, web_contents, may_send_base_page_url,
- base::Bind(&ContextualSearchDelegate::StartSearchTermRequestFromSelection,
- AsWeakPtr()));
+void ContextualSearchDelegate::GatherAndSaveSurroundingText(
+ ContextualSearchContext* contextual_search_context,
+ content::WebContents* web_contents) {
+ DCHECK(web_contents);
+ RenderFrameHost::TextSurroundingSelectionCallback callback =
+ base::Bind(&ContextualSearchDelegate::OnTextSurroundingSelectionAvailable,
+ AsWeakPtr());
+ context_ = contextual_search_context;
+ int surroundingTextSize = context_->IsBrief()
+ ? field_trial_->GetIcingSurroundingSize()
+ : field_trial_->GetSurroundingSize();
+ RenderFrameHost* focused_frame = web_contents->GetFocusedFrame();
+ if (focused_frame) {
+ focused_frame->RequestTextSurroundingSelection(callback,
+ surroundingTextSize);
+ } else {
+ callback.Run(base::string16(), 0, 0);
+ }
}
-void ContextualSearchDelegate::GatherAndSaveSurroundingText(
- const std::string& selection,
- const std::string& home_country,
- content::WebContents* web_contents,
- bool may_send_base_page_url) {
- GatherSurroundingTextWithCallback(
- selection, home_country, web_contents, may_send_base_page_url,
- base::Bind(&ContextualSearchDelegate::SaveSurroundingText, AsWeakPtr()));
- // TODO(donnd): clear the context here, since we're done with it (but risky).
+void ContextualSearchDelegate::StartSearchTermResolutionRequest(
Theresa 2017/03/08 01:54:38 nit: It looks like this method and the one above g
Donn Denman 2017/03/09 17:35:05 Fixed -- Changed the order in the header file to b
+ ContextualSearchContext* contextual_search_context,
+ content::WebContents* web_contents) {
+ DCHECK(web_contents);
+ DCHECK(context_ == contextual_search_context);
+ DCHECK(!context_->IsBrief());
+
+ // Immediately cancel any request that's in flight, since we're building a new
+ // context (and the response disposes of any existing context).
+ search_term_fetcher_.reset();
+
+ // Decide if the URL should be sent with the context.
+ GURL page_url(web_contents->GetURL());
+ GURL url_to_send;
+ if (context_->MaySendBasePageUrl() &&
+ CanSendPageURL(page_url, ProfileManager::GetActiveUserProfile(),
+ template_url_service_)) {
+ url_to_send = page_url;
+ }
+ std::string encoding(web_contents->GetEncoding());
+ context_->page_url = url_to_send;
+ context_->encoding = encoding;
+ ResolveSearchTermFromContext();
}
-void ContextualSearchDelegate::ContinueSearchTermResolutionRequest() {
- DCHECK(context_.get());
- if (!context_.get())
+void ContextualSearchDelegate::ResolveSearchTermFromContext() {
+ DCHECK(context_);
+ if (!context_)
return;
GURL request_url(BuildRequestUrl(context_->home_country));
DCHECK(request_url.is_valid());
@@ -166,9 +189,6 @@ void ContextualSearchDelegate::OnURLFetchComplete(
}
}
search_term_callback_.Run(*resolved_search_term);
-
- // The ContextualSearchContext is consumed once the request has completed.
- context_.reset();
}
std::unique_ptr<ResolvedSearchTerm>
@@ -270,64 +290,20 @@ std::string ContextualSearchDelegate::BuildRequestUrl(
return request;
}
-void ContextualSearchDelegate::GatherSurroundingTextWithCallback(
- const std::string& selection,
- const std::string& home_country,
- content::WebContents* web_contents,
- bool may_send_base_page_url,
- HandleSurroundingsCallback callback) {
- // Immediately cancel any request that's in flight, since we're building a new
- // context (and the response disposes of any existing context).
- search_term_fetcher_.reset();
- BuildContext(selection, home_country, web_contents, may_send_base_page_url);
- DCHECK(web_contents);
- RenderFrameHost* focused_frame = web_contents->GetFocusedFrame();
- if (focused_frame) {
- focused_frame->RequestTextSurroundingSelection(
- callback, field_trial_->GetSurroundingSize());
- } else {
- callback.Run(base::string16(), 0, 0);
- }
-}
-
-void ContextualSearchDelegate::BuildContext(const std::string& selection,
- const std::string& home_country,
- content::WebContents* web_contents,
- bool may_send_base_page_url) {
- // Decide if the URL should be sent with the context.
- GURL page_url(web_contents->GetURL());
- GURL url_to_send;
- if (may_send_base_page_url &&
- CanSendPageURL(page_url, ProfileManager::GetActiveUserProfile(),
- template_url_service_)) {
- url_to_send = page_url;
- }
- std::string encoding(web_contents->GetEncoding());
- context_.reset(new ContextualSearchContext(selection, home_country,
- url_to_send, encoding));
-}
-
-void ContextualSearchDelegate::StartSearchTermRequestFromSelection(
+void ContextualSearchDelegate::OnTextSurroundingSelectionAvailable(
const base::string16& surrounding_text,
int start_offset,
int end_offset) {
- // TODO(donnd): figure out how to gather text surrounding the selection
- // for other purposes too: e.g. to determine if we should select the
- // word where the user tapped.
- if (context_.get()) {
- SaveSurroundingText(surrounding_text, start_offset, end_offset);
+ SaveSurroundingText(surrounding_text, start_offset, end_offset);
+ if (!context_->IsBrief())
SendSurroundingText(kSurroundingSizeForUI);
- ContinueSearchTermResolutionRequest();
- } else {
- DVLOG(1) << "ctxs: Null context, ignored!";
- }
}
void ContextualSearchDelegate::SaveSurroundingText(
const base::string16& surrounding_text,
int start_offset,
int end_offset) {
- DCHECK(context_.get());
+ DCHECK(context_);
// Sometimes the surroundings are 0, 0, '', so fall back on the selection.
// See crbug.com/393100.
if (start_offset == 0 && end_offset == 0 && surrounding_text.length() == 0) {
@@ -351,12 +327,12 @@ void ContextualSearchDelegate::SaveSurroundingText(
int icing_surrounding_size = field_trial_->GetIcingSurroundingSize();
size_t selection_start = context_->start_offset;
size_t selection_end = context_->end_offset;
- if (icing_surrounding_size >= 0 && selection_start < selection_end) {
+ if (icing_surrounding_size >= 0 && selection_start <= selection_end) {
int icing_padding_each_side = icing_surrounding_size / 2;
base::string16 icing_surrounding_text = SurroundingTextForIcing(
context_->surrounding_text, icing_padding_each_side, &selection_start,
&selection_end);
- if (selection_start < selection_end)
+ if (selection_start <= selection_end)
icing_callback_.Run(context_->encoding, icing_surrounding_text,
selection_start, selection_end);
}

Powered by Google App Engine
This is Rietveld 408576698