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 |