Index: chrome_frame/external_tab.cc |
diff --git a/chrome_frame/external_tab.cc b/chrome_frame/external_tab.cc |
deleted file mode 100644 |
index 89b3a0615a29eb12647adc8458b2e398f38f31cb..0000000000000000000000000000000000000000 |
--- a/chrome_frame/external_tab.cc |
+++ /dev/null |
@@ -1,356 +0,0 @@ |
-// Copyright (c) 2011 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 "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/lazy_instance.h" |
-#include "base/location.h" |
-#include "chrome_frame/external_tab.h" |
-#include "base/synchronization/waitable_event.h" |
-#include "chrome/common/automation_messages.h" |
-#include "chrome_frame/chrome_frame_delegate.h" |
-#include "chrome_frame/utils.h" |
- |
-namespace { |
- static base::LazyInstance<ChromeProxyFactory> g_proxy_factory = |
- LAZY_INSTANCE_INITIALIZER; |
- |
- struct UserDataHolder : public SyncMessageContext { |
- explicit UserDataHolder(void* p) : data(p) {} |
- void* data; |
- }; |
-} |
- |
- |
-ExternalTabProxy::ExternalTabProxy() : state_(NONE), tab_(0), tab_wnd_(NULL), |
- chrome_wnd_(NULL), proxy_factory_(g_proxy_factory.Pointer()), proxy_(NULL), |
- ui_delegate_(NULL) { |
-} |
- |
-ExternalTabProxy::~ExternalTabProxy() { |
- Destroy(); |
-} |
- |
-bool ExternalTabProxy::OnMessageReceived(const IPC::Message& message) { |
- bool handled = true; |
- IPC_BEGIN_MESSAGE_MAP(ExternalTabProxy, message) |
- IPC_MESSAGE_HANDLER(AutomationMsg_NavigationStateChanged, |
- OnNavigationStateChanged) |
- IPC_MESSAGE_HANDLER(AutomationMsg_UpdateTargetUrl, OnUpdateTargetUrl) |
- IPC_MESSAGE_HANDLER(AutomationMsg_HandleAccelerator, OnHandleAccelerator) |
- IPC_MESSAGE_HANDLER(AutomationMsg_TabbedOut, OnTabbedOut) |
- IPC_MESSAGE_HANDLER(AutomationMsg_OpenURL, OnOpenURL) |
- IPC_MESSAGE_HANDLER(AutomationMsg_NavigationFailed, OnNavigationFailed) |
- IPC_MESSAGE_HANDLER(AutomationMsg_DidNavigate, OnDidNavigate) |
- IPC_MESSAGE_HANDLER(AutomationMsg_TabLoaded, OnTabLoaded) |
- IPC_MESSAGE_HANDLER(AutomationMsg_MoveWindow, OnMoveWindow) |
- IPC_MESSAGE_HANDLER(AutomationMsg_ForwardMessageToExternalHost, |
- OnMessageToHost) |
- IPC_MESSAGE_HANDLER(AutomationMsg_ForwardContextMenuToExternalHost, |
- OnHandleContextMenu) |
- IPC_MESSAGE_HANDLER(AutomationMsg_RequestStart, OnNetwork_Start) |
- IPC_MESSAGE_HANDLER(AutomationMsg_RequestRead, OnNetwork_Read) |
- IPC_MESSAGE_HANDLER(AutomationMsg_RequestEnd, OnNetwork_End) |
- IPC_MESSAGE_HANDLER(AutomationMsg_DownloadRequestInHost, |
- OnNetwork_DownloadInHost) |
- IPC_MESSAGE_HANDLER(AutomationMsg_GetCookiesFromHost, OnGetCookies) |
- IPC_MESSAGE_HANDLER(AutomationMsg_SetCookieAsync, OnSetCookie) |
- IPC_MESSAGE_HANDLER(AutomationMsg_AttachExternalTab, OnAttachTab) |
- IPC_MESSAGE_HANDLER(AutomationMsg_RequestGoToHistoryEntryOffset, |
- OnGoToHistoryOffset) |
- IPC_MESSAGE_HANDLER(AutomationMsg_CloseExternalTab, OnTabClosed) |
- IPC_MESSAGE_UNHANDLED(handled = false) |
- IPC_END_MESSAGE_MAP() |
- return handled; |
-} |
- |
-void ExternalTabProxy::Init() { |
- if (m_hWnd == NULL) { |
- // Create a window on the UI thread for marshaling messages back and forth |
- // from the IPC thread. This window cannot be a message only window as the |
- // external chrome tab window initially is created as a child of this window |
- CWindowImpl<ExternalTabProxy>::Create(GetDesktopWindow(), NULL, NULL, |
- WS_CHILDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, WS_EX_TOOLWINDOW); |
- DCHECK(m_hWnd != NULL); |
- ui_.SetWindow(m_hWnd, WM_APP + 6); |
- } |
-} |
- |
-void ExternalTabProxy::Destroy() { |
- DCHECK(NULL == done_.get()); |
- // TODO(stoyan): Should we release proxy first and then destroy the window |
- // (parent of the chrome window) or the other way around? |
- if (state_ != NONE) { |
- done_.reset(new base::WaitableEvent(true, false)); |
- proxy_factory_->ReleaseProxy(this, tab_params_.proxy_params.profile); |
- done_->Wait(); |
- done_.reset(NULL); |
- |
- state_ = NONE; |
- proxy_ = NULL; |
- tab_ = 0; |
- CWindowImpl<ExternalTabProxy>::DestroyWindow(); |
- tab_wnd_ = NULL; |
- chrome_wnd_ = NULL; |
- // We shall tell the TaskMarshaller to delete queued tasks. |
- // ui_.DeleteAll(); |
- } |
-} |
- |
-void ExternalTabProxy::CreateTab(const CreateTabParams& create_params, |
- UIDelegate* delegate) { |
- DCHECK(ui_delegate_ == NULL); |
- DCHECK_EQ(NONE, state_); |
- // Create host window if needed. |
- Init(); |
- ui_delegate_ = delegate; |
- // TODO(stoyan): Shall we check the CanNavigate(create_params.url)? |
- tab_params_ = create_params; |
- state_ = INIT_IN_PROGRESS; |
- proxy_factory_->GetProxy(this, create_params.proxy_params); |
-} |
- |
-void ExternalTabProxy::Connected(ChromeProxy* proxy) { |
- // in ipc thread |
- ui_.PostTask(FROM_HERE, base::Bind(&ExternalTabProxy::UiConnected, |
- base::Unretained(this), proxy)); |
-} |
- |
-void ExternalTabProxy::UiConnected(ChromeProxy* proxy) { |
- proxy_ = proxy; |
- ExternalTabSettings settings; |
- settings.parent = m_hWnd; |
- settings.style = WS_CHILD; |
- settings.is_incognito = tab_params_.is_incognito; |
- // TODO(stoyan): FIX this. |
- settings.load_requests_via_automation = true; |
- // TODO(stoyan): FIX this. |
- settings.handle_top_level_requests = true; |
- settings.initial_url = tab_params_.url; |
- settings.referrer = tab_params_.referrer; |
- // Infobars are disabled in widget mode. |
- settings.infobars_enabled = !tab_params_.is_widget_mode; |
- // TODO(stoyan): FIX this. |
- settings.route_all_top_level_navigations = false; |
- |
- state_ = CREATE_TAB_IN_PROGRESS; |
- proxy->CreateTab(this, settings); |
-} |
- |
-void ExternalTabProxy::Disconnected() { |
- // in ipc thread |
- DCHECK(done_.get() != NULL); |
- done_->Signal(); |
-} |
- |
-void ExternalTabProxy::PeerLost(ChromeProxy* proxy, DisconnectReason reason) { |
- ui_.PostTask(FROM_HERE, base::Bind(&ExternalTabProxy::UiPeerLost, |
- base::Unretained(this), proxy, reason)); |
-} |
- |
-void ExternalTabProxy::UiPeerLost(ChromeProxy* proxy, DisconnectReason reason) { |
- // TODO(stoyan): |
-} |
- |
-void ExternalTabProxy::Navigate(const std::string& url, |
- const std::string& referrer, |
- NavigationConstraints* navigation_constraints) { |
- // in ui thread |
- // Catch invalid URLs early. Can we allow this navigation to happen? |
- GURL parsed_url(url); |
- if (!CanNavigate(parsed_url, navigation_constraints)) { |
- DLOG(ERROR) << __FUNCTION__ << " Not allowing navigation to: " << url; |
- return; |
- } |
- |
- GURL parsed_referrer(referrer); |
- // If we are still establishing channel, simply replace the params |
- if (state_ == INIT_IN_PROGRESS) { |
- tab_params_.url = parsed_url; |
- tab_params_.referrer = parsed_referrer; |
- } |
- |
- // Ah! Too late. Wait to get tab handle and then navigate. |
- if (state_ == CREATE_TAB_IN_PROGRESS) { |
- pending_navigation_.Set(parsed_url, parsed_referrer); |
- } |
- |
- if (state_ == READY) { |
- proxy_->Tab_Navigate(tab_, parsed_url, parsed_referrer); |
- } |
-} |
- |
-void ExternalTabProxy::ConnectToExternalTab(uint64 external_tab_cookie) { |
- proxy_->ConnectTab(this, m_hWnd, external_tab_cookie); |
-} |
- |
-void ExternalTabProxy::BlockExternalTab(uint64 cookie) { |
- proxy_->BlockTab(cookie); |
-} |
- |
-void ExternalTabProxy::SetZoomLevel(content::PageZoom zoom_level) { |
- proxy_->Tab_Zoom(tab_, zoom_level); |
-} |
- |
-void ExternalTabProxy::NavigateToIndex(int index) { |
- CHECK(0); |
-} |
- |
-void ExternalTabProxy::ForwardMessageFromExternalHost( |
- const std::string& message, const std::string& origin, |
- const std::string& target) { |
- proxy_->Tab_PostMessage(tab_, message, origin, target); |
-} |
- |
-void ExternalTabProxy::ChromeFrameHostMoved() { |
- proxy_->Tab_OnHostMoved(tab_); |
-} |
- |
-////////////////////////////////////////////////////////////////////////// |
-void ExternalTabProxy::UiCompleted_CreateTab(bool success, HWND chrome_window, |
- HWND tab_window, int tab_handle, |
- int session_id) { |
- if (success) { |
- state_ = READY; |
- tab_ = tab_handle; |
- tab_wnd_ = tab_window; |
- chrome_wnd_ = chrome_window; |
- |
- // If a navigation request came while tab creation was in progress - |
- // go ahead and navigate. |
- if (pending_navigation_.url.is_valid()) |
- proxy_->Tab_Navigate(tab_, pending_navigation_.url, |
- pending_navigation_.referrer); |
- } |
-} |
- |
-void ExternalTabProxy::Completed_CreateTab(bool success, HWND chrome_wnd, |
- HWND tab_window, int tab_handle, |
- int session_id) { |
- // in ipc_thread. |
- ui_.PostTask( |
- FROM_HERE, base::Bind(&ExternalTabProxy::UiCompleted_CreateTab, |
- base::Unretained(this), success, chrome_wnd, |
- tab_window, tab_handle, session_id)); |
-} |
- |
-void ExternalTabProxy::Completed_ConnectToTab( |
- bool success, HWND chrome_window, HWND tab_window, int tab_handle, |
- int session_id) { |
- CHECK(0); |
-} |
- |
-void ExternalTabProxy::Completed_Navigate( |
- bool success, enum AutomationMsg_NavigationResponseValues res) { |
- // ipc_thread; |
- CHECK(0); |
-} |
- |
-void ExternalTabProxy::OnNavigationStateChanged( |
- int flags, const NavigationInfo& nav_info) { |
- ui_.PostTask(FROM_HERE, |
- base::Bind(&UIDelegate::OnNavigationStateChanged, |
- base::Unretained(ui_delegate_), flags, nav_info)); |
-} |
- |
-void ExternalTabProxy::OnUpdateTargetUrl(const std::wstring& url) { |
- ui_.PostTask(FROM_HERE, base::Bind(&UIDelegate::OnUpdateTargetUrl, |
- base::Unretained(ui_delegate_), url)); |
-} |
- |
-void ExternalTabProxy::OnTabLoaded(const GURL& url) { |
- ui_.PostTask(FROM_HERE, base::Bind(&UIDelegate::OnLoad, |
- base::Unretained(ui_delegate_), url)); |
-} |
- |
-void ExternalTabProxy::OnMoveWindow(const gfx::Rect& pos) { |
- ui_.PostTask(FROM_HERE, base::Bind(&UIDelegate::OnMoveWindow, |
- base::Unretained(ui_delegate_), pos)); |
-} |
- |
-void ExternalTabProxy::OnMessageToHost(const std::string& message, |
- const std::string& origin, |
- const std::string& target) { |
- ui_.PostTask( |
- FROM_HERE, |
- base::Bind(&UIDelegate::OnMessageFromChromeFrame, |
- base::Unretained(ui_delegate_), message, origin, target)); |
-} |
- |
-void ExternalTabProxy::OnHandleAccelerator(const MSG& accel_message) { |
- ui_.PostTask(FROM_HERE, |
- base::Bind(&UIDelegate::OnHandleAccelerator, |
- base::Unretained(ui_delegate_), accel_message)); |
-} |
- |
-void ExternalTabProxy::OnHandleContextMenu( |
- const ContextMenuModel& context_menu_model, |
- int align_flags, |
- const MiniContextMenuParams& params) { |
- ui_.PostTask(FROM_HERE, |
- base::Bind(&UIDelegate::OnHandleContextMenu, |
- base::Unretained(ui_delegate_), context_menu_model, |
- align_flags, params)); |
-} |
- |
-void ExternalTabProxy::OnTabbedOut(bool reverse) { |
- ui_.PostTask(FROM_HERE, base::Bind(&UIDelegate::OnTabbedOut, |
- base::Unretained(ui_delegate_), reverse)); |
-} |
- |
-void ExternalTabProxy::OnGoToHistoryOffset(int offset) { |
- ui_.PostTask(FROM_HERE, base::Bind(&UIDelegate::OnGoToHistoryOffset, |
- base::Unretained(ui_delegate_), offset)); |
-} |
- |
-void ExternalTabProxy::OnOpenURL(const GURL& url_to_open, const GURL& referrer, |
- int open_disposition) { |
- ui_.PostTask( |
- FROM_HERE, |
- base::Bind(&UIDelegate::OnOpenURL, base::Unretained(ui_delegate_), |
- url_to_open, referrer, open_disposition)); |
-} |
- |
-void ExternalTabProxy::OnNavigationFailed(int error_code, const GURL& gurl) { |
- // TODO(stoyan): |
-} |
- |
-void ExternalTabProxy::OnDidNavigate(const NavigationInfo& navigation_info) { |
- // TODO(stoyan): |
-} |
- |
-void ExternalTabProxy::OnNetwork_Start( |
- int request_id, const AutomationURLRequest& request_info) { |
- // TODO(stoyan): url_fetcher_.Start(); |
-} |
- |
-void ExternalTabProxy::OnNetwork_Read(int request_id, int bytes_to_read) { |
- // TODO(stoyan): url_fetcher_.Read(); |
-} |
- |
-void ExternalTabProxy::OnNetwork_End(int request_id, |
- const net::URLRequestStatus& s) { |
- // TODO(stoyan): |
-} |
- |
-void ExternalTabProxy::OnNetwork_DownloadInHost(int request_id) { |
- // TODO(stoyan): |
-} |
- |
-void ExternalTabProxy::OnGetCookies(const GURL& url, int cookie_id) { |
- // TODO(stoyan): |
-} |
- |
-void ExternalTabProxy::OnSetCookie(const GURL& url, const std::string& cookie) { |
- // TODO(stoyan): |
-} |
- |
-void ExternalTabProxy::OnTabClosed() { |
- // TODO(stoyan): |
-} |
- |
-void ExternalTabProxy::OnAttachTab( |
- const AttachExternalTabParams& attach_params) { |
- // TODO(stoyan): |
-} |