| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "mash/browser_driver/browser_driver_application_delegate.h" | 5 #include "mash/app_driver/app_driver.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 11 #include "components/mus/common/event_matcher_util.h" | 11 #include "components/mus/common/event_matcher_util.h" |
| 12 #include "mash/public/interfaces/launchable.mojom.h" | 12 #include "mash/public/interfaces/launchable.mojom.h" |
| 13 #include "services/shell/public/cpp/connection.h" | 13 #include "services/shell/public/cpp/connection.h" |
| 14 #include "services/shell/public/cpp/connector.h" | 14 #include "services/shell/public/cpp/connector.h" |
| 15 | 15 |
| 16 using mash::mojom::LaunchablePtr; | 16 using mash::mojom::LaunchablePtr; |
| 17 using mash::mojom::LaunchMode; | 17 using mash::mojom::LaunchMode; |
| 18 | 18 |
| 19 namespace mash { | 19 namespace mash { |
| 20 namespace browser_driver { | 20 namespace app_driver { |
| 21 namespace { | 21 namespace { |
| 22 | 22 |
| 23 enum class Accelerator : uint32_t { | 23 enum class Accelerator : uint32_t { |
| 24 NewWindow, | 24 NewWindow, |
| 25 NewTab, | 25 NewTab, |
| 26 NewIncognitoWindow, | 26 NewIncognitoWindow, |
| 27 }; | 27 }; |
| 28 | 28 |
| 29 struct AcceleratorSpec { | 29 struct AcceleratorSpec { |
| 30 Accelerator id; | 30 Accelerator id; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 44 }; | 44 }; |
| 45 | 45 |
| 46 void AssertTrue(bool success) { | 46 void AssertTrue(bool success) { |
| 47 DCHECK(success); | 47 DCHECK(success); |
| 48 } | 48 } |
| 49 | 49 |
| 50 void DoNothing() {} | 50 void DoNothing() {} |
| 51 | 51 |
| 52 } // namespace | 52 } // namespace |
| 53 | 53 |
| 54 BrowserDriverApplicationDelegate::BrowserDriverApplicationDelegate() | 54 AppDriver::AppDriver() |
| 55 : connector_(nullptr), | 55 : connector_(nullptr), binding_(this), weak_factory_(this) {} |
| 56 binding_(this), | |
| 57 weak_factory_(this) {} | |
| 58 | 56 |
| 59 BrowserDriverApplicationDelegate::~BrowserDriverApplicationDelegate() {} | 57 AppDriver::~AppDriver() {} |
| 60 | 58 |
| 61 void BrowserDriverApplicationDelegate::OnAvailableCatalogEntries( | 59 void AppDriver::OnAvailableCatalogEntries( |
| 62 const mojo::Array<catalog::mojom::EntryPtr>& entries) { | 60 const mojo::Array<catalog::mojom::EntryPtr>& entries) { |
| 63 if (entries.empty()) { | 61 if (entries.empty()) { |
| 64 LOG(ERROR) << "Unable to install accelerators for launching chrome."; | 62 LOG(ERROR) << "Unable to install accelerators for launching chrome."; |
| 65 return; | 63 return; |
| 66 } | 64 } |
| 67 | 65 |
| 68 mus::mojom::AcceleratorRegistrarPtr registrar; | 66 mus::mojom::AcceleratorRegistrarPtr registrar; |
| 69 connector_->ConnectToInterface(entries[0]->name, ®istrar); | 67 connector_->ConnectToInterface(entries[0]->name, ®istrar); |
| 70 | 68 |
| 71 if (binding_.is_bound()) | 69 if (binding_.is_bound()) |
| 72 binding_.Unbind(); | 70 binding_.Unbind(); |
| 73 registrar->SetHandler(binding_.CreateInterfacePtrAndBind()); | 71 registrar->SetHandler(binding_.CreateInterfacePtrAndBind()); |
| 74 // If the window manager restarts, the handler pipe will close and we'll need | 72 // If the window manager restarts, the handler pipe will close and we'll need |
| 75 // to re-add our accelerators when the window manager comes back up. | 73 // to re-add our accelerators when the window manager comes back up. |
| 76 binding_.set_connection_error_handler( | 74 binding_.set_connection_error_handler( |
| 77 base::Bind(&BrowserDriverApplicationDelegate::AddAccelerators, | 75 base::Bind(&AppDriver::AddAccelerators, weak_factory_.GetWeakPtr())); |
| 78 weak_factory_.GetWeakPtr())); | |
| 79 | 76 |
| 80 for (const AcceleratorSpec& spec : g_spec) { | 77 for (const AcceleratorSpec& spec : g_spec) { |
| 81 registrar->AddAccelerator( | 78 registrar->AddAccelerator( |
| 82 static_cast<uint32_t>(spec.id), | 79 static_cast<uint32_t>(spec.id), |
| 83 mus::CreateKeyMatcher(spec.keyboard_code, spec.event_flags), | 80 mus::CreateKeyMatcher(spec.keyboard_code, spec.event_flags), |
| 84 base::Bind(&AssertTrue)); | 81 base::Bind(&AssertTrue)); |
| 85 } | 82 } |
| 86 } | 83 } |
| 87 | 84 |
| 88 void BrowserDriverApplicationDelegate::Initialize( | 85 void AppDriver::Initialize(shell::Connector* connector, |
| 89 shell::Connector* connector, | 86 const shell::Identity& identity, |
| 90 const shell::Identity& identity, | 87 uint32_t id) { |
| 91 uint32_t id) { | |
| 92 connector_ = connector; | 88 connector_ = connector; |
| 93 AddAccelerators(); | 89 AddAccelerators(); |
| 94 } | 90 } |
| 95 | 91 |
| 96 bool BrowserDriverApplicationDelegate::AcceptConnection( | 92 bool AppDriver::AcceptConnection(shell::Connection* connection) { |
| 97 shell::Connection* connection) { | |
| 98 return true; | 93 return true; |
| 99 } | 94 } |
| 100 | 95 |
| 101 bool BrowserDriverApplicationDelegate::ShellConnectionLost() { | 96 bool AppDriver::ShellConnectionLost() { |
| 102 // Prevent the code in AddAccelerators() from keeping this app alive. | 97 // Prevent the code in AddAccelerators() from keeping this app alive. |
| 103 binding_.set_connection_error_handler(base::Bind(&DoNothing)); | 98 binding_.set_connection_error_handler(base::Bind(&DoNothing)); |
| 104 return true; | 99 return true; |
| 105 } | 100 } |
| 106 | 101 |
| 107 void BrowserDriverApplicationDelegate::OnAccelerator( | 102 void AppDriver::OnAccelerator(uint32_t id, mus::mojom::EventPtr event) { |
| 108 uint32_t id, mus::mojom::EventPtr event) { | |
| 109 uint32_t option = mojom::kWindow; | 103 uint32_t option = mojom::kWindow; |
| 110 switch (static_cast<Accelerator>(id)) { | 104 switch (static_cast<Accelerator>(id)) { |
| 111 case Accelerator::NewWindow: | 105 case Accelerator::NewWindow: |
| 112 option = mojom::kWindow; | 106 option = mojom::kWindow; |
| 113 break; | 107 break; |
| 114 case Accelerator::NewTab: | 108 case Accelerator::NewTab: |
| 115 option = mojom::kDocument; | 109 option = mojom::kDocument; |
| 116 break; | 110 break; |
| 117 case Accelerator::NewIncognitoWindow: | 111 case Accelerator::NewIncognitoWindow: |
| 118 option = mojom::kIncognitoWindow; | 112 option = mojom::kIncognitoWindow; |
| 119 break; | 113 break; |
| 120 default: | 114 default: |
| 121 NOTREACHED(); | 115 NOTREACHED(); |
| 122 break; | 116 break; |
| 123 } | 117 } |
| 124 LaunchablePtr launchable; | 118 LaunchablePtr launchable; |
| 125 connector_->ConnectToInterface("exe:chrome", &launchable); | 119 connector_->ConnectToInterface("exe:chrome", &launchable); |
| 126 launchable->Launch(option, LaunchMode::MAKE_NEW); | 120 launchable->Launch(option, LaunchMode::MAKE_NEW); |
| 127 } | 121 } |
| 128 | 122 |
| 129 void BrowserDriverApplicationDelegate::AddAccelerators() { | 123 void AppDriver::AddAccelerators() { |
| 130 connector_->ConnectToInterface("mojo:catalog", &catalog_); | 124 connector_->ConnectToInterface("mojo:catalog", &catalog_); |
| 131 catalog_->GetEntriesProvidingClass( | 125 catalog_->GetEntriesProvidingClass( |
| 132 "mus:window_manager", | 126 "mus:window_manager", base::Bind(&AppDriver::OnAvailableCatalogEntries, |
| 133 base::Bind(&BrowserDriverApplicationDelegate::OnAvailableCatalogEntries, | 127 weak_factory_.GetWeakPtr())); |
| 134 weak_factory_.GetWeakPtr())); | |
| 135 } | 128 } |
| 136 | 129 |
| 137 } // namespace browser_driver | 130 } // namespace app_driver |
| 138 } // namespace mash | 131 } // namespace mash |
| OLD | NEW |