Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Unified Diff: chrome/browser/chromeos/arc/ui/arc_support_message_host.cc

Issue 2436903003: Extract ArcSupportMessageHost. (Closed)
Patch Set: Fix tests Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/arc/ui/arc_support_message_host.cc
diff --git a/chrome/browser/chromeos/arc/ui/arc_support_message_host.cc b/chrome/browser/chromeos/arc/ui/arc_support_message_host.cc
new file mode 100644
index 0000000000000000000000000000000000000000..8c09a242116cd0001615a56e6dae4e8d4f3c6b26
--- /dev/null
+++ b/chrome/browser/chromeos/arc/ui/arc_support_message_host.cc
@@ -0,0 +1,77 @@
+// 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.
+
+#include "chrome/browser/chromeos/arc/ui/arc_support_message_host.h"
+
+#include "base/json/json_reader.h"
+#include "base/json/json_writer.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "chrome/browser/chromeos/arc/arc_auth_service.h"
+#include "chrome/browser/chromeos/arc/arc_support_host.h"
+
+namespace arc {
+
+// static
+const char ArcSupportMessageHost::kHostName[] = "com.google.arc_support";
+
+// static
+const char* const ArcSupportMessageHost::kHostOrigin[] = {
+ "chrome-extension://cnbgggchhmkkdmeppjobngjoejnihlei/"};
+
+// static
+std::unique_ptr<extensions::NativeMessageHost> ArcSupportMessageHost::Create() {
+ return std::unique_ptr<NativeMessageHost>(new ArcSupportMessageHost());
+}
+
+ArcSupportMessageHost::ArcSupportMessageHost() = default;
+
+ArcSupportMessageHost::~ArcSupportMessageHost() {
+ ArcAuthService* auth_service = ArcAuthService::Get();
+ if (auth_service)
+ auth_service->support_host()->UnsetMessageHost(this);
+}
+
+void ArcSupportMessageHost::SendMessage(const base::Value& message) {
+ if (!client_)
+ return;
+
+ std::string message_string;
+ base::JSONWriter::Write(message, &message_string);
+ client_->PostMessageFromNativeHost(message_string);
+}
+
+void ArcSupportMessageHost::SetObserver(Observer* observer) {
+ observer_ = observer;
khmel 2016/10/21 03:34:49 nit: DCHECK(!observer_), meaning we cannot overrid
hidehiko 2016/10/21 07:40:27 This also can be used to detach the observer. Adde
+}
+
+void ArcSupportMessageHost::Start(Client* client) {
+ DCHECK(!client_);
+ client_ = client;
+
+ ArcAuthService* auth_service = ArcAuthService::Get();
+ if (auth_service)
Luis Héctor Chávez 2016/10/21 02:24:08 This looks racy. If |auth_service| is null, then A
khmel 2016/10/21 03:34:49 It seems ArcAuthService::Get() cannot be nullptr i
hidehiko 2016/10/21 07:40:27 Indeed, here DCHECK is appropriate, but in dtor, i
+ auth_service->support_host()->SetMessageHost(this);
+}
+
+void ArcSupportMessageHost::OnMessage(const std::string& message_string) {
+ if (!observer_)
+ return;
+
+ std::unique_ptr<base::Value> message_value =
+ base::JSONReader::Read(message_string);
+ base::DictionaryValue* message;
+ if (!message_value || !message_value->GetAsDictionary(&message)) {
+ NOTREACHED();
+ return;
+ }
+
+ observer_->OnMessage(*message);
+}
+
+scoped_refptr<base::SingleThreadTaskRunner> ArcSupportMessageHost::task_runner()
+ const {
+ return base::ThreadTaskRunnerHandle::Get();
+}
+
+} // namespace arc

Powered by Google App Engine
This is Rietveld 408576698