| 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
|
|
|