Chromium Code Reviews| Index: chrome/browser/extensions/api/messaging/arc_opt_in_host.cc |
| diff --git a/chrome/browser/extensions/api/messaging/arc_opt_in_host.cc b/chrome/browser/extensions/api/messaging/arc_opt_in_host.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..4f3b18da24c0a1cbf6a47936c9b390d66fdb53b3 |
| --- /dev/null |
| +++ b/chrome/browser/extensions/api/messaging/arc_opt_in_host.cc |
| @@ -0,0 +1,74 @@ |
| +// 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/extensions/api/messaging/arc_opt_in_host.h" |
| + |
| +#include "base/json/json_reader.h" |
| +#include "base/json/json_writer.h" |
| +#include "base/values.h" |
| + |
| +namespace { |
| +const char kAction[] = "action"; |
| +const char kActionFetchAuthCode[] = "fetchAuthCode"; |
| +const char kActionCloseUI[] = "closeUI"; |
| +} |
|
xiyuan
2016/02/11 17:57:20
nit: } // namespace
khmel
2016/02/12 02:45:23
Done.
|
| + |
| +// static |
| +const char ArcOptInHost::kHostName[] = "com.google.arc_opt_in"; |
| + |
| +// static |
| +const char* const ArcOptInHost::kHostOrigin[] = { |
| + "chrome-extension://cnbgggchhmkkdmeppjobngjoejnihlei/" |
| +}; |
| + |
| +ArcOptInHost::ArcOptInHost() { |
| + arc::ArcAuthService::Get()->AddObserver(this); |
| +} |
| + |
| +ArcOptInHost::~ArcOptInHost() { |
| + arc::ArcAuthService::Get()->RemoveObserver(this); |
| +} |
| + |
| +void ArcOptInHost::Start(Client* client) { |
| + DCHECK(!client_); |
| + client_ = client; |
| +} |
| + |
| +void ArcOptInHost::OnOptInUINeedToClose() { |
| + if (!client_) |
| + return; |
| + |
| + base::DictionaryValue response; |
| + response.SetString(kAction, kActionCloseUI); |
| + std::string response_string; |
| + base::JSONWriter::Write(response, &response_string); |
| + client_->PostMessageFromNativeHost(response_string); |
| +} |
| + |
| +void ArcOptInHost::OnMessage(const std::string& request_string) { |
| + scoped_ptr<base::Value> request_value = |
| + base::JSONReader::Read(request_string); |
| + scoped_ptr<base::DictionaryValue> request( |
| + static_cast<base::DictionaryValue*>(request_value.release())); |
| + if (!request.get()) { |
| + NOTREACHED(); |
| + return; |
| + } |
| + |
| + std::string action; |
| + if (!request->GetString(kAction, &action)) { |
| + NOTREACHED(); |
| + return; |
| + } |
| + |
| + if (action == kActionFetchAuthCode) { |
| + arc::ArcAuthService::Get()->CheckAuthCode(); |
| + } else { |
| + NOTREACHED(); |
| + } |
| +} |
| + |
| +scoped_refptr<base::SingleThreadTaskRunner> ArcOptInHost::task_runner() const { |
| + return base::ThreadTaskRunnerHandle::Get(); |
| +} |