| Index: extensions/browser/guest_view/web_view/web_view_find_helper.cc
|
| diff --git a/extensions/browser/guest_view/web_view/web_view_find_helper.cc b/extensions/browser/guest_view/web_view/web_view_find_helper.cc
|
| deleted file mode 100644
|
| index e7b7730c9246f2a2adba83e62d270b8c55e88628..0000000000000000000000000000000000000000
|
| --- a/extensions/browser/guest_view/web_view/web_view_find_helper.cc
|
| +++ /dev/null
|
| @@ -1,282 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "extensions/browser/guest_view/web_view/web_view_find_helper.h"
|
| -
|
| -#include <utility>
|
| -
|
| -#include "chrome/browser/extensions/api/web_view/web_view_internal_api.h"
|
| -#include "extensions/browser/guest_view/web_view/web_view_constants.h"
|
| -
|
| -namespace extensions {
|
| -
|
| -WebViewFindHelper::WebViewFindHelper(WebViewGuest* webview_guest)
|
| - : webview_guest_(webview_guest), current_find_request_id_(0) {
|
| -}
|
| -
|
| -WebViewFindHelper::~WebViewFindHelper() {
|
| -}
|
| -
|
| -void WebViewFindHelper::CancelAllFindSessions() {
|
| - current_find_session_ = linked_ptr<WebViewFindHelper::FindInfo>();
|
| - while (!find_info_map_.empty()) {
|
| - find_info_map_.begin()->second->SendResponse(true /* canceled */);
|
| - find_info_map_.erase(find_info_map_.begin());
|
| - }
|
| - if (find_update_event_.get())
|
| - DispatchFindUpdateEvent(true /* canceled */, true /* final_update */);
|
| - find_update_event_.reset();
|
| -}
|
| -
|
| -void WebViewFindHelper::DispatchFindUpdateEvent(bool canceled,
|
| - bool final_update) {
|
| - DCHECK(find_update_event_.get());
|
| - scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
|
| - find_update_event_->PrepareResults(args.get());
|
| - args->SetBoolean(webview::kFindCanceled, canceled);
|
| - args->SetBoolean(webview::kFindFinalUpdate, final_update);
|
| - DCHECK(webview_guest_);
|
| - webview_guest_->DispatchEventToEmbedder(
|
| - new GuestViewBase::Event(webview::kEventFindReply, args.Pass()));
|
| -}
|
| -
|
| -void WebViewFindHelper::EndFindSession(int session_request_id, bool canceled) {
|
| - FindInfoMap::iterator session_iterator =
|
| - find_info_map_.find(session_request_id);
|
| - DCHECK(session_iterator != find_info_map_.end());
|
| - FindInfo* find_info = session_iterator->second.get();
|
| -
|
| - // Call the callback function of the first request of the find session.
|
| - find_info->SendResponse(canceled);
|
| -
|
| - // For every subsequent find request of the find session.
|
| - for (std::vector<base::WeakPtr<WebViewFindHelper::FindInfo> >::iterator i =
|
| - find_info->find_next_requests_.begin();
|
| - i != find_info->find_next_requests_.end();
|
| - ++i) {
|
| - DCHECK(i->get());
|
| -
|
| - // Do not call callbacks for subsequent find requests that have not been
|
| - // replied to yet. These requests will get their own final updates in the
|
| - // same order as they appear in |find_next_requests_|, i.e. the order that
|
| - // the requests were made in. Once one request is found that has not been
|
| - // replied to, none that follow will be replied to either, and do not need
|
| - // to be checked.
|
| - if (!(*i)->replied_)
|
| - break;
|
| -
|
| - // Update the request's number of matches (if not canceled).
|
| - if (!canceled) {
|
| - (*i)->find_results_.number_of_matches_ =
|
| - find_info->find_results_.number_of_matches_;
|
| - }
|
| -
|
| - // Call the request's callback function with the find results, and then
|
| - // delete its map entry to free the WebViewInternalFindFunction object.
|
| - (*i)->SendResponse(canceled);
|
| - find_info_map_.erase((*i)->request_id_);
|
| - }
|
| -
|
| - // Erase the first find request's map entry to free the
|
| - // WebViewInternalFindFunction
|
| - // object.
|
| - find_info_map_.erase(session_request_id);
|
| -}
|
| -
|
| -void WebViewFindHelper::Find(
|
| - content::WebContents* guest_web_contents,
|
| - const base::string16& search_text,
|
| - const blink::WebFindOptions& options,
|
| - scoped_refptr<WebViewInternalFindFunction> find_function) {
|
| - // Need a new request_id for each new find request.
|
| - ++current_find_request_id_;
|
| -
|
| - // Stores the find request information by request_id so that its callback
|
| - // function can be called when the find results are available.
|
| - std::pair<FindInfoMap::iterator, bool> insert_result =
|
| - find_info_map_.insert(std::make_pair(
|
| - current_find_request_id_,
|
| - linked_ptr<
|
| - WebViewFindHelper::FindInfo>(new WebViewFindHelper::FindInfo(
|
| - current_find_request_id_, search_text, options, find_function))));
|
| - // No duplicate insertions.
|
| - DCHECK(insert_result.second);
|
| -
|
| - // Find options including the implicit |findNext| field.
|
| - blink::WebFindOptions* full_options = insert_result.first->second->options();
|
| -
|
| - // Set |findNext| implicitly.
|
| - if (current_find_session_.get()) {
|
| - const base::string16& current_search_text =
|
| - current_find_session_->search_text();
|
| - bool current_match_case = current_find_session_->options()->matchCase;
|
| - full_options->findNext = !current_search_text.empty() &&
|
| - current_search_text == search_text &&
|
| - current_match_case == options.matchCase;
|
| - } else {
|
| - full_options->findNext = false;
|
| - }
|
| -
|
| - // Link find requests that are a part of the same find session.
|
| - if (full_options->findNext && current_find_session_.get()) {
|
| - DCHECK(current_find_request_id_ != current_find_session_->request_id());
|
| - current_find_session_->AddFindNextRequest(
|
| - insert_result.first->second->AsWeakPtr());
|
| - }
|
| -
|
| - // Update the current find session, if necessary.
|
| - if (!full_options->findNext)
|
| - current_find_session_ = insert_result.first->second;
|
| -
|
| - guest_web_contents->Find(current_find_request_id_,
|
| - search_text, *full_options);
|
| -}
|
| -
|
| -void WebViewFindHelper::FindReply(int request_id,
|
| - int number_of_matches,
|
| - const gfx::Rect& selection_rect,
|
| - int active_match_ordinal,
|
| - bool final_update) {
|
| - FindInfoMap::iterator find_iterator = find_info_map_.find(request_id);
|
| -
|
| - // Ignore slow replies to canceled find requests.
|
| - if (find_iterator == find_info_map_.end())
|
| - return;
|
| -
|
| - // This find request must be a part of an existing find session.
|
| - DCHECK(current_find_session_.get());
|
| -
|
| - WebViewFindHelper::FindInfo* find_info = find_iterator->second.get();
|
| -
|
| - // Handle canceled find requests.
|
| - if (!find_info->options()->findNext &&
|
| - find_info_map_.begin()->first < request_id) {
|
| - DCHECK_NE(current_find_session_->request_id(),
|
| - find_info_map_.begin()->first);
|
| - DispatchFindUpdateEvent(true /* canceled */, true /* final_update */);
|
| - EndFindSession(find_info_map_.begin()->first, true /* canceled */);
|
| - }
|
| -
|
| - // Clears the results for |findupdate| for a new find session.
|
| - if (!find_info->replied() && !find_info->options()->findNext)
|
| - find_update_event_.reset(new FindUpdateEvent(find_info->search_text()));
|
| -
|
| - // Aggregate the find results.
|
| - find_info->AggregateResults(number_of_matches, selection_rect,
|
| - active_match_ordinal, final_update);
|
| - find_update_event_->AggregateResults(number_of_matches, selection_rect,
|
| - active_match_ordinal, final_update);
|
| -
|
| - // Propagate incremental results to the |findupdate| event.
|
| - DispatchFindUpdateEvent(false /* canceled */, final_update);
|
| -
|
| - // Call the callback functions of completed find requests.
|
| - if (final_update)
|
| - EndFindSession(request_id, false /* canceled */);
|
| -}
|
| -
|
| -WebViewFindHelper::FindResults::FindResults()
|
| - : number_of_matches_(0), active_match_ordinal_(0) {
|
| -}
|
| -
|
| -WebViewFindHelper::FindResults::~FindResults() {
|
| -}
|
| -
|
| -void WebViewFindHelper::FindResults::AggregateResults(
|
| - int number_of_matches,
|
| - const gfx::Rect& selection_rect,
|
| - int active_match_ordinal,
|
| - bool final_update) {
|
| - if (number_of_matches != -1)
|
| - number_of_matches_ = number_of_matches;
|
| -
|
| - if (active_match_ordinal != -1)
|
| - active_match_ordinal_ = active_match_ordinal;
|
| -
|
| - if (final_update && active_match_ordinal_ == 0) {
|
| - // No match found, so the selection rectangle is empty.
|
| - selection_rect_ = gfx::Rect();
|
| - } else if (!selection_rect.IsEmpty()) {
|
| - selection_rect_ = selection_rect;
|
| - }
|
| -}
|
| -
|
| -void WebViewFindHelper::FindResults::PrepareResults(
|
| - base::DictionaryValue* results) {
|
| - results->SetInteger(webview::kFindNumberOfMatches, number_of_matches_);
|
| - results->SetInteger(webview::kFindActiveMatchOrdinal, active_match_ordinal_);
|
| - base::DictionaryValue rect;
|
| - rect.SetInteger(webview::kFindRectLeft, selection_rect_.x());
|
| - rect.SetInteger(webview::kFindRectTop, selection_rect_.y());
|
| - rect.SetInteger(webview::kFindRectWidth, selection_rect_.width());
|
| - rect.SetInteger(webview::kFindRectHeight, selection_rect_.height());
|
| - results->Set(webview::kFindSelectionRect, rect.DeepCopy());
|
| -}
|
| -
|
| -WebViewFindHelper::FindUpdateEvent::FindUpdateEvent(
|
| - const base::string16& search_text)
|
| - : search_text_(search_text) {
|
| -}
|
| -
|
| -WebViewFindHelper::FindUpdateEvent::~FindUpdateEvent() {
|
| -}
|
| -
|
| -void WebViewFindHelper::FindUpdateEvent::AggregateResults(
|
| - int number_of_matches,
|
| - const gfx::Rect& selection_rect,
|
| - int active_match_ordinal,
|
| - bool final_update) {
|
| - find_results_.AggregateResults(number_of_matches, selection_rect,
|
| - active_match_ordinal, final_update);
|
| -}
|
| -
|
| -void WebViewFindHelper::FindUpdateEvent::PrepareResults(
|
| - base::DictionaryValue* results) {
|
| - results->SetString(webview::kFindSearchText, search_text_);
|
| - find_results_.PrepareResults(results);
|
| -}
|
| -
|
| -WebViewFindHelper::FindInfo::FindInfo(
|
| - int request_id,
|
| - const base::string16& search_text,
|
| - const blink::WebFindOptions& options,
|
| - scoped_refptr<WebViewInternalFindFunction> find_function)
|
| - : request_id_(request_id),
|
| - search_text_(search_text),
|
| - options_(options),
|
| - find_function_(find_function),
|
| - replied_(false),
|
| - weak_ptr_factory_(this) {
|
| -}
|
| -
|
| -WebViewFindHelper::FindInfo::~FindInfo() {
|
| -}
|
| -
|
| -void WebViewFindHelper::FindInfo::AggregateResults(
|
| - int number_of_matches,
|
| - const gfx::Rect& selection_rect,
|
| - int active_match_ordinal,
|
| - bool final_update) {
|
| - replied_ = true;
|
| - find_results_.AggregateResults(number_of_matches, selection_rect,
|
| - active_match_ordinal, final_update);
|
| -}
|
| -
|
| -base::WeakPtr<WebViewFindHelper::FindInfo>
|
| -WebViewFindHelper::FindInfo::AsWeakPtr() {
|
| - return weak_ptr_factory_.GetWeakPtr();
|
| -}
|
| -
|
| -void WebViewFindHelper::FindInfo::SendResponse(bool canceled) {
|
| - // Prepare the find results to pass to the callback function.
|
| - base::DictionaryValue results;
|
| - find_results_.PrepareResults(&results);
|
| - results.SetBoolean(webview::kFindCanceled, canceled);
|
| -
|
| - // Call the callback.
|
| - find_function_->SetResult(results.DeepCopy());
|
| - find_function_->SendResponse(true);
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|