| // Copyright 2016 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 BLIMP_ENGINE_SESSION_TAB_H_ |
| #define BLIMP_ENGINE_SESSION_TAB_H_ |
| |
| #include "base/macros.h" |
| #include "blimp/engine/feature/engine_render_widget_feature.h" |
| #include "blimp/engine/session/page_load_tracker.h" |
| #include "content/public/browser/invalidate_type.h" |
| #include "content/public/browser/web_contents_observer.h" |
| |
| namespace content { |
| class RenderViewHost; |
| class WebContents; |
| } |
| |
| namespace blimp { |
| |
| class BlimpMessageProcessor; |
| |
| namespace engine { |
| |
| class EngineRenderWidgetFeature; |
| |
| // Owns WebContents, handles operations such as navigation requests in the tab, |
| // and has one-to-one mapping to a client tab. |
| class Tab : public content::WebContentsObserver, |
| public PageLoadTrackerClient, |
| public EngineRenderWidgetFeature::RenderWidgetMessageDelegate { |
| public: |
| // Caller ensures |render_widget_feature| and |navigation_message_sender| |
| // outlives this object. |
| // |web_contents|: the WebContents this tab owns. |
| // |tab_id|: the ID of this tab. |
| // |render_widget_feature|: render widget feature. |
| // |navigation_message_sender|: for sending navigation messages to client. |
| Tab(std::unique_ptr<content::WebContents> web_contents, |
| const int tab_id, |
| EngineRenderWidgetFeature* render_widget_feature, |
| BlimpMessageProcessor* navigation_message_sender); |
| ~Tab() override; |
| |
| content::WebContents* web_contents() { return web_contents_.get(); } |
| int tab_id() const { return tab_id_; } |
| |
| // Resizes the tab to |size_in_dips| with |device_pixel_ratio|. |
| void Resize(float device_pixel_ratio, const gfx::Size& size_in_dips); |
| |
| // Handles tab navigation. |
| void LoadUrl(const GURL& url); |
| void GoBack(); |
| void GoForward(); |
| void Reload(); |
| |
| // Handles navigation state changed event. |
| void NavigationStateChanged(content::InvalidateTypes changed_flags); |
| |
| // PageLoadTrackerClient implementation. |
| void SendPageLoadStatusUpdate(PageLoadStatus load_status) override; |
| |
| // RenderWidgetMessage handler methods. |
| // RenderWidgetMessageDelegate implementation. |
| void OnWebGestureEvent( |
| content::RenderWidgetHost* render_widget_host, |
| std::unique_ptr<blink::WebGestureEvent> event) override; |
| void OnCompositorMessageReceived( |
| content::RenderWidgetHost* render_widget_host, |
| const std::vector<uint8_t>& message) override; |
| |
| private: |
| // content::WebContentsObserver implementation. |
| void RenderViewCreated(content::RenderViewHost* render_view_host) override; |
| void RenderViewHostChanged(content::RenderViewHost* old_host, |
| content::RenderViewHost* new_host) override; |
| void RenderViewDeleted(content::RenderViewHost* render_view_host) override; |
| |
| std::unique_ptr<content::WebContents> web_contents_; |
| const int tab_id_; |
| EngineRenderWidgetFeature* render_widget_feature_; |
| BlimpMessageProcessor* navigation_message_sender_; |
| |
| // Tracks the page load status for a tab. |
| PageLoadTracker page_load_tracker_; |
| |
| DISALLOW_COPY_AND_ASSIGN(Tab); |
| }; |
| |
| } // namespace engine |
| } // namespace blimp |
| |
| #endif // BLIMP_ENGINE_SESSION_TAB_H_ |