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

Unified Diff: components/web_view/find_controller.cc

Issue 1677293002: Bye bye Mandoline (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: moar Created 4 years, 10 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
« no previous file with comments | « components/web_view/find_controller.h ('k') | components/web_view/find_controller_delegate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/web_view/find_controller.cc
diff --git a/components/web_view/find_controller.cc b/components/web_view/find_controller.cc
deleted file mode 100644
index 77c30bad0cfa23be38f8bd0dcbed9120f5788742..0000000000000000000000000000000000000000
--- a/components/web_view/find_controller.cc
+++ /dev/null
@@ -1,238 +0,0 @@
-// Copyright 2015 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 "components/web_view/find_controller.h"
-
-#include "base/bind.h"
-#include "base/strings/string_util.h"
-#include "base/trace_event/trace_event.h"
-#include "components/web_view/find_controller_delegate.h"
-#include "components/web_view/frame.h"
-
-namespace web_view {
-
-FindController::FindController(FindControllerDelegate* delegate)
- : delegate_(delegate),
- find_request_id_counter_(0),
- current_find_request_id_(-1),
- frame_with_selection_(0),
- weak_ptr_factory_(this) {}
-
-FindController::~FindController() {}
-
-void FindController::Find(const std::string& in_search_string,
- bool forward_direction) {
- TRACE_EVENT2("web_view", "FindController::Find",
- "search_string", in_search_string,
- "forward_direction", forward_direction);
- std::string search_string = in_search_string;
- // Remove the carriage return character, which generally isn't in web content.
- const char kInvalidChars[] = {'\r', 0};
- base::RemoveChars(search_string, kInvalidChars, &search_string);
-
- previous_find_text_ = find_text_;
-
- // TODO(erg): Do we need to something like |find_op_aborted_|?
-
- find_frames_in_order_ = delegate_->GetAllFrames();
-
- uint32_t starting_frame;
- bool continue_last_find =
- find_text_ == search_string || search_string.empty();
- if (!continue_last_find) {
- current_find_request_id_ = find_request_id_counter_++;
- frame_with_selection_ = 0;
- returned_find_data_.clear();
- starting_frame = find_frames_in_order_.front()->id();
- } else {
- starting_frame = frame_with_selection_;
- }
-
- if (!search_string.empty())
- find_text_ = search_string;
-
- LocalFindOptions options;
- options.forward = forward_direction;
- options.continue_last_find = continue_last_find;
- // Prime the continue loop.
- OnContinueFinding(current_find_request_id_, search_string, options,
- starting_frame, 0u, false);
-}
-
-void FindController::StopFinding() {
- // Don't report any callbacks that we get after this.
- current_find_request_id_ = -1;
- frame_with_selection_ = 0;
-
- for (Frame* f : delegate_->GetAllFrames())
- f->StopFinding(true);
-}
-
-void FindController::OnFindInFrameCountUpdated(int32_t request_id,
- Frame* frame,
- int32_t count,
- bool final_update) {
- if (request_id != current_find_request_id_)
- return;
-
- auto it = returned_find_data_.find(frame);
- if (it == returned_find_data_.end()) {
- NOTREACHED();
- return;
- }
-
- it->second.count = count;
- it->second.final_update = final_update;
-
- int merged_count = 0;
- bool merged_final_update = true;
- for (auto const& data : returned_find_data_) {
- merged_count += data.second.count;
- merged_final_update = merged_final_update && data.second.final_update;
- }
-
- // We can now take the individual FindInFrame messages and construct a
- // FindInPage message.
- delegate_->GetWebViewClient()->FindInPageMatchCountUpdated(
- request_id, merged_count, merged_final_update);
-}
-
-void FindController::OnFindInPageSelectionUpdated(
- int32_t request_id,
- Frame* frame,
- int32_t active_match_ordinal) {
- if (request_id != current_find_request_id_)
- return;
-
- // TODO(erg): This is the one that's really hard. To give an accurate count
- // here, we need to have all the results for frames that are before the Frame
- // that contains the selected match so we can add their sums together.
- //
- // Thankfully, we don't have to worry about this now. Since there aren't
- // back/forward controls yet, active_match_ordinal will always be 1.
- delegate_->GetWebViewClient()->FindInPageSelectionUpdated(
- request_id, active_match_ordinal);
-}
-
-void FindController::DidDestroyFrame(Frame* frame) {
- auto it =
- find(find_frames_in_order_.begin(), find_frames_in_order_.end(), frame);
- if (it != find_frames_in_order_.end())
- find_frames_in_order_.erase(it);
-}
-
-void FindController::OnContinueFinding(int32_t request_id,
- const std::string& search_string,
- LocalFindOptions options,
- uint32_t starting_frame,
- uint32_t current_frame,
- bool found) {
- TRACE_EVENT2("web_view", "FindController::OnContinueFinding",
- "request_id", request_id,
- "search_string", search_string);
- if (!found) {
- // So we need to figure out what the next frame to search is.
- Frame* next_frame =
- GetNextFrameToSearch(starting_frame, current_frame, options.forward);
-
- // If we have one more frame to search:
- if (next_frame) {
- bool wrap_within_frame = find_frames_in_order_.size() == 1;
- next_frame->Find(
- request_id, mojo::String::From(search_string),
- mojom::FindOptions::From(options), wrap_within_frame,
- base::Bind(&FindController::OnContinueFinding,
- weak_ptr_factory_.GetWeakPtr(), request_id, search_string,
- options, starting_frame, next_frame->id()));
-
- // TODO(erg): This doesn't deal with wrapping around the document at the
- // end when there are multiple frames and the last frame doesn't have a
- // result.
- return;
- }
- }
-
- frame_with_selection_ = found ? current_frame : 0;
-
- if (!options.continue_last_find) {
- // If nothing is found, set result to "0 of 0", otherwise, set it to
- // "-1 of 1" to indicate that we found at least one item, but we don't know
- // yet what is active.
- int ordinal = found ? -1 : 0; // -1 here means, we might know more later.
- int match_count = found ? 1 : 0; // 1 here means possibly more coming.
-
- // If we find no matches then this will be our last status update.
- // Otherwise the scoping effort will send more results.
- bool final_status_update = !found;
-
- // Send priming messages.
- delegate_->GetWebViewClient()->FindInPageSelectionUpdated(request_id,
- ordinal);
- delegate_->GetWebViewClient()->FindInPageMatchCountUpdated(
- request_id, match_count, final_status_update);
-
- std::vector<Frame*> frames = delegate_->GetAllFrames();
- for (Frame* f : frames) {
- f->StopHighlightingFindResults();
-
- if (found) {
- MatchData& match_data = returned_find_data_[f];
- match_data.count = 0;
- match_data.final_update = false;
- f->HighlightFindResults(request_id, mojo::String::From(search_string),
- mojom::FindOptions::From(options), true);
- }
- }
- }
-}
-
-Frame* FindController::GetNextFrameToSearch(uint32_t starting_frame,
- uint32_t current_frame,
- bool forward) {
- std::vector<Frame*>::iterator it;
- if (current_frame == 0u) {
- it = GetFrameIteratorById(starting_frame);
- CHECK(it != find_frames_in_order_.end());
- return *it;
- }
-
- Frame* candidate;
- it = GetFrameIteratorById(current_frame);
- if (it == find_frames_in_order_.end()) {
- // Our current frame has been deleted. There is nothing to be done now; we
- // will abort.
- return nullptr;
- }
-
- if (forward) {
- ++it;
- if (it == find_frames_in_order_.end())
- it = find_frames_in_order_.begin();
- candidate = *it;
- } else {
- if (it == find_frames_in_order_.begin()) {
- candidate = find_frames_in_order_.back();
- } else {
- --it;
- candidate = *it;
- }
- }
-
- // If we've looped around the entire frame tree, then we are done and return
- // null.
- if (candidate->id() == starting_frame)
- return nullptr;
- return candidate;
-}
-
-std::vector<Frame*>::iterator FindController::GetFrameIteratorById(
- uint32_t frame_id) {
- return find_if(find_frames_in_order_.begin(),
- find_frames_in_order_.end(),
- [&frame_id](Frame* f) {
- return f->id() == frame_id;
- });
-}
-
-} // namespace web_view
« no previous file with comments | « components/web_view/find_controller.h ('k') | components/web_view/find_controller_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698