Index: win8/viewer/metro_viewer_process_host.cc |
diff --git a/win8/viewer/metro_viewer_process_host.cc b/win8/viewer/metro_viewer_process_host.cc |
deleted file mode 100644 |
index a3652410d413a25cefa04ab0e7af970f16f593af..0000000000000000000000000000000000000000 |
--- a/win8/viewer/metro_viewer_process_host.cc |
+++ /dev/null |
@@ -1,346 +0,0 @@ |
-// Copyright (c) 2013 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 "win8/viewer/metro_viewer_process_host.h" |
- |
-#include <shlobj.h> |
-#include <stdint.h> |
- |
-#include "base/command_line.h" |
-#include "base/files/file_path.h" |
-#include "base/files/file_util.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/path_service.h" |
-#include "base/process/process.h" |
-#include "base/strings/string16.h" |
-#include "base/synchronization/waitable_event.h" |
-#include "base/time/time.h" |
-#include "base/win/scoped_comptr.h" |
-#include "base/win/windows_version.h" |
-#include "ipc/ipc_channel_proxy.h" |
-#include "ipc/ipc_message.h" |
-#include "ipc/ipc_message_macros.h" |
-#include "ui/aura/remote_window_tree_host_win.h" |
-#include "ui/metro_viewer/metro_viewer_messages.h" |
-#include "win8/viewer/metro_viewer_constants.h" |
- |
-namespace { |
- |
-const int kViewerProcessConnectionTimeoutSecs = 60; |
- |
-} // namespace |
- |
-namespace win8 { |
- |
-// static |
-MetroViewerProcessHost* MetroViewerProcessHost::instance_ = NULL; |
- |
-MetroViewerProcessHost::InternalMessageFilter::InternalMessageFilter( |
- MetroViewerProcessHost* owner) |
- : owner_(owner) { |
-} |
- |
-void MetroViewerProcessHost::InternalMessageFilter::OnChannelConnected( |
- int32_t peer_pid) { |
- owner_->NotifyChannelConnected(); |
-} |
- |
-MetroViewerProcessHost::InternalMessageFilter::~InternalMessageFilter() { |
-} |
- |
-MetroViewerProcessHost::MetroViewerProcessHost( |
- const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner) { |
- DCHECK(!instance_); |
- instance_ = this; |
- |
- channel_ = IPC::ChannelProxy::Create(kMetroViewerIPCChannelName, |
- IPC::Channel::MODE_NAMED_SERVER, |
- this, |
- ipc_task_runner); |
-} |
- |
-MetroViewerProcessHost::~MetroViewerProcessHost() { |
- if (!channel_) { |
- instance_ = NULL; |
- return; |
- } |
- |
- base::ProcessId viewer_process_id = GetViewerProcessId(); |
- channel_->Close(); |
- if (message_filter_.get()) { |
- // Wait for the viewer process to go away. |
- if (viewer_process_id != base::kNullProcessId) { |
- base::Process viewer_process = |
- base::Process::OpenWithAccess( |
- viewer_process_id, |
- PROCESS_QUERY_INFORMATION | SYNCHRONIZE); |
- if (viewer_process.IsValid()) { |
- int exit_code; |
- viewer_process.WaitForExit(&exit_code); |
- } |
- } |
- channel_->RemoveFilter(message_filter_.get()); |
- } |
- instance_ = NULL; |
-} |
- |
-base::ProcessId MetroViewerProcessHost::GetViewerProcessId() { |
- if (channel_) |
- return channel_->GetPeerPID(); |
- return base::kNullProcessId; |
-} |
- |
-bool MetroViewerProcessHost::LaunchViewerAndWaitForConnection( |
- const base::string16& app_user_model_id) { |
- DCHECK_EQ(base::kNullProcessId, channel_->GetPeerPID()); |
- |
- channel_connected_event_.reset(new base::WaitableEvent(false, false)); |
- |
- message_filter_ = new InternalMessageFilter(this); |
- channel_->AddFilter(message_filter_.get()); |
- |
- if (base::win::GetVersion() >= base::win::VERSION_WIN8) { |
- base::win::ScopedComPtr<IApplicationActivationManager> activator; |
- HRESULT hr = activator.CreateInstance(CLSID_ApplicationActivationManager); |
- if (SUCCEEDED(hr)) { |
- DWORD pid = 0; |
- // Use the "connect" verb to |
- hr = activator->ActivateApplication( |
- app_user_model_id.c_str(), kMetroViewerConnectVerb, AO_NONE, &pid); |
- } |
- |
- LOG_IF(ERROR, FAILED(hr)) << "Tried and failed to launch Metro Chrome. " |
- << "hr=" << std::hex << hr; |
- } else { |
- // For Windows 7 we need to launch the viewer ourselves. |
- base::FilePath chrome_path; |
- if (!PathService::Get(base::DIR_EXE, &chrome_path)) |
- return false; |
- // TODO(cpu): launch with "-ServerName:DefaultBrowserServer" |
- // note that the viewer might try to launch chrome again. |
- CHECK(false); |
- } |
- |
- // Having launched the viewer process, now we wait for it to connect. |
- bool success = |
- channel_connected_event_->TimedWait(base::TimeDelta::FromSeconds( |
- kViewerProcessConnectionTimeoutSecs)); |
- channel_connected_event_.reset(); |
- return success; |
-} |
- |
-bool MetroViewerProcessHost::Send(IPC::Message* msg) { |
- return channel_->Send(msg); |
-} |
- |
-bool MetroViewerProcessHost::OnMessageReceived( |
- const IPC::Message& message) { |
- DCHECK(CalledOnValidThread()); |
- bool handled = true; |
- IPC_BEGIN_MESSAGE_MAP(MetroViewerProcessHost, message) |
- IPC_MESSAGE_HANDLER(MetroViewerHostMsg_FileSaveAsDone, |
- OnFileSaveAsDone) |
- IPC_MESSAGE_HANDLER(MetroViewerHostMsg_FileOpenDone, |
- OnFileOpenDone) |
- IPC_MESSAGE_HANDLER(MetroViewerHostMsg_MultiFileOpenDone, |
- OnMultiFileOpenDone) |
- IPC_MESSAGE_HANDLER(MetroViewerHostMsg_OpenURL, OnOpenURL) |
- IPC_MESSAGE_HANDLER(MetroViewerHostMsg_SearchRequest, OnHandleSearchRequest) |
- IPC_MESSAGE_HANDLER(MetroViewerHostMsg_SelectFolderDone, |
- OnSelectFolderDone) |
- IPC_MESSAGE_HANDLER(MetroViewerHostMsg_SetTargetSurface, OnSetTargetSurface) |
- IPC_MESSAGE_HANDLER(MetroViewerHostMsg_WindowSizeChanged, |
- OnWindowSizeChanged) |
- IPC_MESSAGE_UNHANDLED(handled = false) |
- IPC_END_MESSAGE_MAP() |
- return handled ? true : |
- aura::RemoteWindowTreeHostWin::Instance()->OnMessageReceived(message); |
-} |
- |
-// static |
-void MetroViewerProcessHost::HandleActivateDesktop( |
- const base::FilePath& path, |
- bool ash_exit) { |
- if (instance_) { |
- instance_->Send( |
- new MetroViewerHostMsg_ActivateDesktop(path, ash_exit)); |
- } |
-} |
- |
-// static |
-void MetroViewerProcessHost::HandleMetroExit() { |
- if (instance_) |
- instance_->Send(new MetroViewerHostMsg_MetroExit()); |
-} |
- |
-// static |
-void MetroViewerProcessHost::HandleOpenFile( |
- const base::string16& title, |
- const base::FilePath& default_path, |
- const base::string16& filter, |
- const OpenFileCompletion& on_success, |
- const FileSelectionCanceled& on_failure) { |
- if (instance_) { |
- instance_->HandleOpenFileImpl(title, default_path, filter, on_success, |
- on_failure); |
- } |
-} |
- |
-// static |
-void MetroViewerProcessHost::HandleOpenMultipleFiles( |
- const base::string16& title, |
- const base::FilePath& default_path, |
- const base::string16& filter, |
- const OpenMultipleFilesCompletion& on_success, |
- const FileSelectionCanceled& on_failure) { |
- if (instance_) { |
- instance_->HandleOpenMultipleFilesImpl(title, default_path, filter, |
- on_success, on_failure); |
- } |
-} |
- |
-// static |
-void MetroViewerProcessHost::HandleSaveFile( |
- const base::string16& title, |
- const base::FilePath& default_path, |
- const base::string16& filter, |
- int filter_index, |
- const base::string16& default_extension, |
- const SaveFileCompletion& on_success, |
- const FileSelectionCanceled& on_failure) { |
- if (instance_) { |
- instance_->HandleSaveFileImpl(title, default_path, filter, filter_index, |
- default_extension, on_success, on_failure); |
- } |
-} |
- |
-// static |
-void MetroViewerProcessHost::HandleSelectFolder( |
- const base::string16& title, |
- const SelectFolderCompletion& on_success, |
- const FileSelectionCanceled& on_failure) { |
- if (instance_) |
- instance_->HandleSelectFolderImpl(title, on_success, on_failure); |
-} |
- |
-void MetroViewerProcessHost::HandleOpenFileImpl( |
- const base::string16& title, |
- const base::FilePath& default_path, |
- const base::string16& filter, |
- const OpenFileCompletion& on_success, |
- const FileSelectionCanceled& on_failure) { |
- // Can only have one of these operations in flight. |
- DCHECK(file_open_completion_callback_.is_null()); |
- DCHECK(failure_callback_.is_null()); |
- |
- file_open_completion_callback_ = on_success; |
- failure_callback_ = on_failure; |
- |
- Send(new MetroViewerHostMsg_DisplayFileOpen(title, filter, default_path, |
- false)); |
-} |
- |
-void MetroViewerProcessHost::HandleOpenMultipleFilesImpl( |
- const base::string16& title, |
- const base::FilePath& default_path, |
- const base::string16& filter, |
- const OpenMultipleFilesCompletion& on_success, |
- const FileSelectionCanceled& on_failure) { |
- // Can only have one of these operations in flight. |
- DCHECK(multi_file_open_completion_callback_.is_null()); |
- DCHECK(failure_callback_.is_null()); |
- multi_file_open_completion_callback_ = on_success; |
- failure_callback_ = on_failure; |
- |
- Send(new MetroViewerHostMsg_DisplayFileOpen(title, filter, default_path, |
- true)); |
-} |
- |
-void MetroViewerProcessHost::HandleSaveFileImpl( |
- const base::string16& title, |
- const base::FilePath& default_path, |
- const base::string16& filter, |
- int filter_index, |
- const base::string16& default_extension, |
- const SaveFileCompletion& on_success, |
- const FileSelectionCanceled& on_failure) { |
- MetroViewerHostMsg_SaveAsDialogParams params; |
- params.title = title; |
- params.default_extension = default_extension; |
- params.filter = filter; |
- params.filter_index = filter_index; |
- params.suggested_name = default_path; |
- |
- // Can only have one of these operations in flight. |
- DCHECK(file_saveas_completion_callback_.is_null()); |
- DCHECK(failure_callback_.is_null()); |
- file_saveas_completion_callback_ = on_success; |
- failure_callback_ = on_failure; |
- |
- Send(new MetroViewerHostMsg_DisplayFileSaveAs(params)); |
-} |
- |
-void MetroViewerProcessHost::HandleSelectFolderImpl( |
- const base::string16& title, |
- const SelectFolderCompletion& on_success, |
- const FileSelectionCanceled& on_failure) { |
- // Can only have one of these operations in flight. |
- DCHECK(select_folder_completion_callback_.is_null()); |
- DCHECK(failure_callback_.is_null()); |
- select_folder_completion_callback_ = on_success; |
- failure_callback_ = on_failure; |
- |
- Send(new MetroViewerHostMsg_DisplaySelectFolder(title)); |
-} |
- |
-void MetroViewerProcessHost::NotifyChannelConnected() { |
- if (channel_connected_event_) |
- channel_connected_event_->Signal(); |
-} |
- |
-void MetroViewerProcessHost::OnFileSaveAsDone(bool success, |
- const base::FilePath& filename, |
- int filter_index) { |
- if (success) |
- file_saveas_completion_callback_.Run(filename, filter_index, NULL); |
- else |
- failure_callback_.Run(NULL); |
- file_saveas_completion_callback_.Reset(); |
- failure_callback_.Reset(); |
-} |
- |
- |
-void MetroViewerProcessHost::OnFileOpenDone(bool success, |
- const base::FilePath& filename) { |
- if (success) |
- file_open_completion_callback_.Run(base::FilePath(filename), 0, NULL); |
- else |
- failure_callback_.Run(NULL); |
- file_open_completion_callback_.Reset(); |
- failure_callback_.Reset(); |
-} |
- |
-void MetroViewerProcessHost::OnMultiFileOpenDone( |
- bool success, |
- const std::vector<base::FilePath>& files) { |
- if (success) |
- multi_file_open_completion_callback_.Run(files, NULL); |
- else |
- failure_callback_.Run(NULL); |
- multi_file_open_completion_callback_.Reset(); |
- failure_callback_.Reset(); |
-} |
- |
-void MetroViewerProcessHost::OnSelectFolderDone( |
- bool success, |
- const base::FilePath& folder) { |
- if (success) |
- select_folder_completion_callback_.Run(base::FilePath(folder), 0, NULL); |
- else |
- failure_callback_.Run(NULL); |
- select_folder_completion_callback_.Reset(); |
- failure_callback_.Reset(); |
-} |
- |
-} // namespace win8 |