123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- // Copyright 2019 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.
- #ifndef IOS_WEB_FIND_IN_PAGE_FIND_IN_PAGE_REQUEST_H_
- #define IOS_WEB_FIND_IN_PAGE_FIND_IN_PAGE_REQUEST_H_
- #include <list>
- #include <map>
- #include <string>
- #import <Foundation/Foundation.h>
- @class NSString;
- namespace web {
- class WebFrame;
- // Keeps track of the state of a FindInPageManager::Find() request.
- class FindInPageRequest {
- public:
- FindInPageRequest();
- ~FindInPageRequest();
- // Clears properties and sets new |query| and |pending_frame_call_count|.
- void Reset(NSString* query, int pending_frame_call_count);
- int GetTotalMatchCount() const;
- int GetRequestId() const;
- NSString* GetRequestQuery() const;
- // Sets |selected_frame_id| and |selected_match_index_in_selected_frame| to
- // the first match on the page. No-op if no known matches exist. Returns
- // true if selected a match, false otherwise.
- bool GoToFirstMatch();
- // Sets |selected_frame_id| and |selected_match_index_in_selected_frame| to
- // the next match on the page. No-op if no known matches exist. Returns true
- // if selected a match, false otherwise.
- bool GoToNextMatch();
- // Sets |selected_frame_id| and |selected_match_index_in_selected_frame| to
- // the previous match on the page. No-op if no known matches exist. Returns
- // true if selected a match, false otherwise.
- bool GoToPreviousMatch();
- // Returns the number of matches in |selected_frame_id|. If no match is
- // currently selected, then returns -1;
- int GetMatchCountForSelectedFrame();
- // Sets |match_count| for |selected_frame_id|, if one exists.
- void SetMatchCountForSelectedFrame(int match_count);
- // Returns the index of the currently selected match for all matches on the
- // page. If no match is selected, then returns -1.
- int GetCurrentSelectedMatchPageIndex();
- // Returns the id of the WebFrame containing the currently selected match.
- // Returns empty string if no currently selected match.
- std::string GetSelectedFrameId();
- // Returns the index of the currently selected match relative to the matches
- // within its frame. If no match is selected, then returns -1.
- int GetCurrentSelectedMatchFrameIndex() const;
- // Sets |index| as the currently selected index relative to the selected
- // frame.
- void SetCurrentSelectedMatchFrameIndex(int index);
- // Returns the number of matches in |frame_id|. If |frame_id| is invalid,
- // then returns -1.
- int GetMatchCountForFrame(const std::string& frame_id);
- // Sets |match_count| for |frame_id|.
- void SetMatchCountForFrame(int match_count, const std::string& frame_id);
- // Removes frame with Id |frame_id| from |frame_order| and
- // |frame_match_count|. Resets |selected_frame_id| and
- // |selected_match_index_in_selected_frame| if the frame with |frame_id|
- // contains the currently selected match.
- void RemoveFrame(const std::string& frame_id);
- // Adds new frame to |frame_order_| and |frame_match_count_|.
- void AddFrame(WebFrame* web_frame);
- // After each frame's Find request has finished, call this method to
- // decrement |pending_frame_counts| to indicate to the receiver of the
- // request completion.
- void DidReceiveFindResponseFromOneFrame();
- // Returns true if there are no more pending Find requests, false
- // otherwise.
- bool AreAllFindResponsesReturned();
- private:
- // Unique identifier for each find used to check that it is the most recent
- // find. This ensures that an old find doesn't decrement
- // |pending_frame_calls_count| after it has been reset by the new find.
- int unique_id_ = 0;
- // Query string of find request. NSString type to ensure query passed to
- // delegate methods is the same type as what is passed into Find().
- NSString* query_ = nil;
- // Counter to keep track of pending frame JavaScript calls.
- int pending_frame_call_count_ = 0;
- // Holds number of matches found for each frame keyed by frame_id.
- std::map<std::string, int> frame_match_count_;
- // List of frame_ids used for sorting matches.
- std::list<std::string> frame_order_;
- // Id of frame which has the currently selected match. Set to
- // frame_order.end() if there is no currently selected match. All matches
- // from the last find will be highlighted. However, the match at
- // |selected_match_index_in_selected_frame| will be highlighted in a
- // visually unique manner. This match is referred to as the "selected match"
- // and can be changed with the FindInPageNext and FindInPagePrevious
- // commands.
- std::list<std::string>::iterator selected_frame_id_ = frame_order_.end();
- // Index of the currently selected match or -1 if there is none.
- int selected_match_index_in_selected_frame_ = -1;
- // Returns true if |frame_id| contains the currently selected match, false
- // otherwise.
- bool IsSelectedFrame(const std::string& frame_id);
- };
- } // namespace web
- #endif // IOS_WEB_FIND_IN_PAGE_FIND_IN_PAGE_REQUEST_H_
|