Index: components/web_view/frame.h |
diff --git a/components/web_view/frame.h b/components/web_view/frame.h |
deleted file mode 100644 |
index ec7c6ca9291a6754688ffa0448bb9889939dfdac..0000000000000000000000000000000000000000 |
--- a/components/web_view/frame.h |
+++ /dev/null |
@@ -1,294 +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. |
- |
-#ifndef COMPONENTS_WEB_VIEW_FRAME_H_ |
-#define COMPONENTS_WEB_VIEW_FRAME_H_ |
- |
-#include <stdint.h> |
- |
-#include <map> |
-#include <vector> |
- |
-#include "base/macros.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/time/time.h" |
-#include "components/mus/common/types.h" |
-#include "components/mus/public/cpp/window_observer.h" |
-#include "components/web_view/public/interfaces/frame.mojom.h" |
-#include "mojo/public/cpp/bindings/binding.h" |
- |
-class GURL; |
- |
-namespace web_view { |
- |
-class FrameTest; |
-class FrameTree; |
-class FrameUserData; |
- |
-namespace mojom { |
-class FrameClient; |
-} |
- |
-enum class WindowOwnership { |
- OWNS_WINDOW, |
- DOESNT_OWN_WINDOW, |
-}; |
- |
-// Frame represents an embedding in a frame. Frames own their children. |
-// Frames automatically delete themself if the Window the frame is associated |
-// with is deleted. |
-// |
-// In general each Frame has a Window. When a new Frame is created by a client |
-// there may be a small amount of time where the Window is not yet known |
-// (separate pipes are used for the window and frame, resulting in undefined |
-// message ordering). In this case the window is null and will be set once we |
-// see the window (OnTreeChanged()). |
-// |
-// Each frame has an identifier of the app providing the FrameClient |
-// (|app_id|). This id is used when servicing a request to navigate the frame. |
-// When navigating, if the id of the new app matches that of the existing app, |
-// then it is expected that the new FrameClient will take over rendering to the |
-// existing window. Because of this a new WindowTreeClient is not obtained and |
-// Embed() is not invoked on the Window. The FrameClient can detect this case by |
-// the argument |reuse_existing_view| supplied to OnConnect(). Typically the id |
-// is that of content handler id, but this is left up to the FrameTreeDelegate |
-// to decide. |
-class Frame : public mus::WindowObserver, public mojom::Frame { |
- public: |
- using ClientPropertyMap = std::map<std::string, std::vector<uint8_t>>; |
- using FindCallback = mojo::Callback<void(bool)>; |
- |
- Frame(FrameTree* tree, |
- mus::Window* window, |
- uint32_t frame_id, |
- uint32_t app_id, |
- WindowOwnership window_ownership, |
- mojom::FrameClient* frame_client, |
- scoped_ptr<FrameUserData> user_data, |
- const ClientPropertyMap& client_properties); |
- ~Frame() override; |
- |
- void Init(Frame* parent, |
- mus::mojom::WindowTreeClientPtr window_tree_client, |
- mojo::InterfaceRequest<mojom::Frame> frame_request, |
- base::TimeTicks navigation_start_time); |
- |
- // Walks the Window tree starting at |window| going up returning the first |
- // Frame that is associated with |window|. For example, if |window| |
- // has a Frame associated with it, then that is returned. Otherwise |
- // this checks window->parent() and so on. |
- static Frame* FindFirstFrameAncestor(mus::Window* window); |
- |
- FrameTree* tree() { return tree_; } |
- |
- Frame* parent() { return parent_; } |
- const Frame* parent() const { return parent_; } |
- |
- mus::Window* window() { return window_; } |
- const mus::Window* window() const { return window_; } |
- |
- uint32_t id() const { return id_; } |
- |
- uint32_t app_id() const { return app_id_; } |
- |
- bool loading() const { return loading_; } |
- |
- const ClientPropertyMap& client_properties() const { |
- return client_properties_; |
- } |
- |
- // Finds the descendant with the specified id. |
- Frame* FindFrame(uint32_t id) { |
- return const_cast<Frame*>(const_cast<const Frame*>(this)->FindFrame(id)); |
- } |
- const Frame* FindFrame(uint32_t id) const; |
- |
- bool HasAncestor(const Frame* frame) const; |
- |
- FrameUserData* user_data() { return user_data_.get(); } |
- |
- const std::vector<Frame*>& children() const { return children_; } |
- |
- // Returns true if this Frame or any child Frame is loading. |
- bool IsLoading() const; |
- |
- // Returns the sum total of loading progress from this Frame and all of its |
- // children, as well as the number of Frames accumulated. |
- double GatherProgress(int* frame_count) const; |
- |
- void Find(int32_t request_id, |
- const mojo::String& search_text, |
- mojom::FindOptionsPtr options, |
- bool wrap_within_frame, |
- const FindCallback& callback); |
- void StopFinding(bool clear_selection); |
- void HighlightFindResults(int32_t request_id, |
- const mojo::String& search_text, |
- mojom::FindOptionsPtr options, |
- bool reset); |
- void StopHighlightingFindResults(); |
- |
- private: |
- friend class FrameTest; |
- friend class FrameTree; |
- |
- // Identifies whether the FrameClient is from the same app or a different |
- // app. |
- enum class ClientType { |
- // The client is either the root frame, or navigating an existing frame |
- // to a different app. |
- EXISTING_FRAME_NEW_APP, |
- |
- // The client is the result of navigating an existing frame in the same |
- // app. |
- EXISTING_FRAME_SAME_APP, |
- |
- // The client is the result of a new frame (not the root). |
- NEW_CHILD_FRAME |
- }; |
- |
- struct FrameUserDataAndBinding; |
- |
- // Initializes the client by sending it the state of the tree. |
- // |data_and_binding| contains the current FrameUserDataAndBinding (if any) |
- // and is destroyed after the connection responds to OnConnect(). |
- // |
- // If |client_type| is SAME_APP we can't destroy the existing client |
- // (and related data) until we get back the ack from OnConnect(). This way |
- // we know the client has completed the switch. If we did not do this it |
- // would be possible for the app to see it's existing Frame connection lost |
- // (and assume the frame is being torn down) before the OnConnect(). |
- void InitClient(ClientType client_type, |
- scoped_ptr<FrameUserDataAndBinding> data_and_binding, |
- mus::mojom::WindowTreeClientPtr window_tree_client, |
- mojo::InterfaceRequest<mojom::Frame> frame_request, |
- base::TimeTicks navigation_start_time); |
- |
- // Callback from OnConnect(). This does nothing (other than destroying |
- // |data_and_binding|). See InitClient() for details as to why destruction of |
- // |data_and_binding| happens after OnConnect(). |
- static void OnConnectAck( |
- scoped_ptr<FrameUserDataAndBinding> data_and_binding); |
- |
- // Callback from OnEmbed(). |
- void OnEmbedAck(bool success, mus::ConnectionSpecificId connection_id); |
- |
- // Callback from Frame::OnWillNavigate(). Completes navigation. |
- void OnWillNavigateAck(mojom::FrameClient* frame_client, |
- scoped_ptr<FrameUserData> user_data, |
- mus::mojom::WindowTreeClientPtr window_tree_client, |
- uint32_t app_id, |
- base::TimeTicks navigation_start_time); |
- |
- // Completes a navigation request; swapping the existing FrameClient to the |
- // supplied arguments. |
- void ChangeClient(mojom::FrameClient* frame_client, |
- scoped_ptr<FrameUserData> user_data, |
- mus::mojom::WindowTreeClientPtr window_tree_client, |
- uint32_t app_id, |
- base::TimeTicks navigation_start_time); |
- |
- void SetWindow(mus::Window* window); |
- |
- // Adds this to |frames| and recurses through the children calling the |
- // same function. |
- void BuildFrameTree(std::vector<const Frame*>* frames) const; |
- |
- void Add(Frame* node); |
- void Remove(Frame* node); |
- |
- // Starts a new navigation to |request|. The navigation proceeds as long |
- // as there is a Window and once OnWillNavigate() has returned. If there is |
- // no Window the navigation waits until the Window is available. |
- void StartNavigate(mojo::URLRequestPtr request); |
- void OnCanNavigateFrame(const GURL& url, |
- base::TimeTicks navigation_start_time, |
- uint32_t app_id, |
- mojom::FrameClient* frame_client, |
- scoped_ptr<FrameUserData> user_data, |
- mus::mojom::WindowTreeClientPtr window_tree_client); |
- |
- // Notifies the client and all descendants as appropriate. |
- void NotifyAdded(const Frame* source, |
- const Frame* added_node, |
- uint32_t change_id); |
- void NotifyRemoved(const Frame* source, |
- const Frame* removed_node, |
- uint32_t change_id); |
- void NotifyClientPropertyChanged(const Frame* source, |
- const mojo::String& name, |
- const mojo::Array<uint8_t>& value); |
- void NotifyFrameLoadingStateChanged(const Frame* frame, bool loading); |
- void NotifyDispatchFrameLoadEvent(const Frame* frame); |
- |
- // mus::WindowObserver: |
- void OnTreeChanged(const TreeChangeParams& params) override; |
- void OnWindowDestroying(mus::Window* window) override; |
- void OnWindowEmbeddedAppDisconnected(mus::Window* window) override; |
- |
- // mojom::Frame: |
- void PostMessageEventToFrame(uint32_t target_frame_id, |
- mojom::HTMLMessageEventPtr event) override; |
- void LoadingStateChanged(bool loading, double progress) override; |
- void TitleChanged(const mojo::String& title) override; |
- void DidCommitProvisionalLoad() override; |
- void SetClientProperty(const mojo::String& name, |
- mojo::Array<uint8_t> value) override; |
- void OnCreatedFrame( |
- mojo::InterfaceRequest<mojom::Frame> frame_request, |
- mojom::FrameClientPtr client, |
- uint32_t frame_id, |
- mojo::Map<mojo::String, mojo::Array<uint8_t>> client_properties) override; |
- void RequestNavigate(mojom::NavigationTargetType target_type, |
- uint32_t target_frame_id, |
- mojo::URLRequestPtr request) override; |
- void DidNavigateLocally(const mojo::String& url) override; |
- void DispatchLoadEventToParent() override; |
- void OnFindInFrameCountUpdated(int32_t request_id, |
- int32_t count, |
- bool final_update) override; |
- void OnFindInPageSelectionUpdated(int32_t request_id, |
- int32_t active_match_ordinal) override; |
- |
- FrameTree* const tree_; |
- // WARNING: this may be null. See class description for details. |
- mus::Window* window_; |
- // The connection id returned from WindowManager::Embed(). Frames created by |
- // way of OnCreatedFrame() inherit the id from the parent. |
- mus::ConnectionSpecificId embedded_connection_id_; |
- // ID for the frame, which is the same as that of the window. |
- const uint32_t id_; |
- // ID of the app providing the FrameClient and WindowTreeClient. |
- uint32_t app_id_; |
- Frame* parent_; |
- WindowOwnership window_ownership_; |
- std::vector<Frame*> children_; |
- scoped_ptr<FrameUserData> user_data_; |
- |
- mojom::FrameClient* frame_client_; |
- |
- bool loading_; |
- double progress_; |
- |
- ClientPropertyMap client_properties_; |
- |
- // StartNavigate() stores the request here if the window isn't available at |
- // the time of StartNavigate(). |
- mojo::URLRequestPtr pending_navigate_; |
- |
- scoped_ptr<mojo::Binding<mojom::Frame>> frame_binding_; |
- |
- // True if waiting on callback from FrameClient::OnWillNavigate(). |
- bool waiting_for_on_will_navigate_ack_; |
- |
- base::WeakPtrFactory<Frame> embed_weak_ptr_factory_; |
- |
- base::WeakPtrFactory<Frame> navigate_weak_ptr_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(Frame); |
-}; |
- |
-} // namespace web_view |
- |
-#endif // COMPONENTS_WEB_VIEW_FRAME_H_ |