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

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

Issue 2436903003: Extract ArcSupportMessageHost. (Closed)
Patch Set: Rebase 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/extensions/arc_support_message_host.cc
diff --git a/chrome/browser/chromeos/arc/extensions/arc_support_message_host.cc b/chrome/browser/chromeos/arc/extensions/arc_support_message_host.cc
new file mode 100644
index 0000000000000000000000000000000000000000..2ba2e99e80e418ce3c9c8d3e231058552ec9cfd2
--- /dev/null
+++ b/chrome/browser/chromeos/arc/extensions/arc_support_message_host.cc
@@ -0,0 +1,87 @@
+// 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/extensions/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() {
+ // On shutdown, ArcAuthService may be already deleted. In that case,
+ // ArcAuthService::Get() returns nullptr. Note that, ArcSupportHost
+ // disconnects to this instance on shutdown already.
+ ArcAuthService* auth_service = ArcAuthService::Get();
+ if (auth_service) {
+ DCHECK(auth_service->support_host());
+ 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) {
+ // We assume that the observer instance is only ArcSupportHost, which is
+ // currently system unique. This is also used to reset the observere,
+ // so |observer| xor |observer_| needs to be nullptr.
+ DCHECK(!observer != !observer_);
+ observer_ = observer;
+}
+
+void ArcSupportMessageHost::Start(Client* client) {
+ DCHECK(!client_);
+ client_ = client;
+
+ ArcAuthService* auth_service = ArcAuthService::Get();
+ DCHECK(auth_service);
+ DCHECK(auth_service->support_host());
+ 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