Index: chrome/browser/ui/webui/copresence_ui_handler.cc |
diff --git a/chrome/browser/ui/webui/copresence_ui_handler.cc b/chrome/browser/ui/webui/copresence_ui_handler.cc |
deleted file mode 100644 |
index 0f03a57fbcc573b45784d2d4d9adb907c7c4fb59..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/webui/copresence_ui_handler.cc |
+++ /dev/null |
@@ -1,214 +0,0 @@ |
-// Copyright 2014 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/ui/webui/copresence_ui_handler.h" |
- |
-#include <map> |
-#include <memory> |
-#include <string> |
-#include <utility> |
-#include <vector> |
- |
-#include "base/bind.h" |
-#include "base/i18n/time_formatting.h" |
-#include "base/time/time.h" |
-#include "base/values.h" |
-#include "chrome/browser/extensions/api/copresence/copresence_api.h" |
-#include "components/copresence/proto/data.pb.h" |
-#include "components/copresence/public/copresence_manager.h" |
-#include "components/copresence/public/copresence_state.h" |
-#include "components/copresence/tokens.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/browser/web_ui.h" |
-#include "ui/base/l10n/time_format.h" |
- |
-using base::ListValue; |
-using base::DictionaryValue; |
-using content::WebUI; |
-using copresence::Directive; |
-using copresence::ReceivedToken; |
-using copresence::TransmittedToken; |
-using extensions::CopresenceService; |
- |
-// TODO(ckehoe): Make debug strings translatable? |
- |
-namespace { |
- |
-std::string FormatInstructionType( |
- copresence::TokenInstructionType directive_type) { |
- switch (directive_type) { |
- case copresence::TRANSMIT: |
- return "Transmit"; |
- |
- case copresence::RECEIVE: |
- return "Receive"; |
- |
- default: |
- NOTREACHED(); |
- return "Unknown"; |
- } |
-} |
- |
-std::string FormatMedium(copresence::TokenMedium medium) { |
- switch (medium) { |
- case copresence::AUDIO_ULTRASOUND_PASSBAND: |
- return "Ultrasound"; |
- |
- case copresence::AUDIO_AUDIBLE_DTMF: |
- return "Audible"; |
- |
- default: |
- NOTREACHED(); |
- return "Unknown"; |
- } |
-} |
- |
-std::string ConvertStatus(const TransmittedToken& token) { |
- bool done = token.stop_time < base::Time::Now(); |
- std::string status = done ? "done" : "active"; |
- if (token.broadcast_confirmed) |
- status += " confirmed"; |
- return status; |
-} |
- |
-std::string ConvertStatus(const ReceivedToken& token) { |
- switch (token.valid) { |
- case ReceivedToken::VALID: |
- return "valid"; |
- |
- case ReceivedToken::INVALID: |
- return "invalid"; |
- |
- case ReceivedToken::UNKNOWN: |
- return std::string(); |
- |
- default: |
- NOTREACHED(); |
- return std::string(); |
- } |
-} |
- |
-template <class T> |
-std::unique_ptr<DictionaryValue> FormatToken(const T& token) { |
- std::unique_ptr<DictionaryValue> js_token(new DictionaryValue); |
- |
- js_token->SetString("id", token.id); |
- js_token->SetString("statuses", ConvertStatus(token)); |
- js_token->SetString("medium", FormatMedium(token.medium)); |
- DCHECK(!token.start_time.is_null()); |
- js_token->SetString("time", |
- base::TimeFormatTimeOfDay(token.start_time)); |
- |
- return js_token; |
-} |
- |
-// Retrieve the CopresenceService, if any. |
-CopresenceService* GetCopresenceService(WebUI* web_ui) { |
- DCHECK(web_ui); |
- return CopresenceService::GetFactoryInstance()->Get( |
- web_ui->GetWebContents()->GetBrowserContext()); |
-} |
- |
-// Safely retrieve the CopresenceState, if any. |
-copresence::CopresenceState* GetCopresenceState(CopresenceService* service) { |
- // During shutdown, there may be no CopresenceService. |
- return service && service->manager() ? service->manager()->state() : nullptr; |
-} |
- |
-// Safely retrieve the CopresenceState, if any. It would be cleaner if we could |
-// put this into CopresenceUIHandler and call WebUIMessageHandler::web_ui() |
-// instead of taking an argument. However, it turns out that web_ui() returns |
-// null when called in the constructor. So we pass in the web_ui explicitly. |
-copresence::CopresenceState* GetCopresenceState(WebUI* web_ui) { |
- return GetCopresenceState(GetCopresenceService(web_ui)); |
-} |
- |
-} // namespace |
- |
- |
-// Public functions. |
- |
-CopresenceUIHandler::CopresenceUIHandler(WebUI* web_ui) |
- : state_(GetCopresenceState(web_ui)) { |
- DCHECK(state_); |
- state_->AddObserver(this); |
-} |
- |
-CopresenceUIHandler::~CopresenceUIHandler() { |
- // Check if the CopresenceService is still up before unregistering. |
- state_ = GetCopresenceState(web_ui()); |
- if (state_) |
- state_->RemoveObserver(this); |
-} |
- |
- |
-// Private functions. |
- |
-void CopresenceUIHandler::RegisterMessages() { |
- web_ui()->RegisterMessageCallback( |
- "populateCopresenceState", |
- base::Bind(&CopresenceUIHandler::HandlePopulateState, |
- base::Unretained(this))); |
- web_ui()->RegisterMessageCallback( |
- "clearCopresenceState", |
- base::Bind(&CopresenceUIHandler::HandleClearState, |
- base::Unretained(this))); |
-} |
- |
-void CopresenceUIHandler::DirectivesUpdated() { |
- ListValue js_directives; |
- for (const Directive& directive : state_->active_directives()) { |
- std::unique_ptr<DictionaryValue> js_directive(new DictionaryValue); |
- |
- js_directive->SetString("type", FormatInstructionType( |
- directive.token_instruction().token_instruction_type())); |
- js_directive->SetString("medium", FormatMedium( |
- directive.token_instruction().medium())); |
- js_directive->SetString("duration", ui::TimeFormat::Simple( |
- ui::TimeFormat::FORMAT_DURATION, |
- ui::TimeFormat::LENGTH_LONG, |
- base::TimeDelta::FromMilliseconds(directive.ttl_millis()))); |
- |
- js_directives.Append(std::move(js_directive)); |
- } |
- |
- web_ui()->CallJavascriptFunctionUnsafe("refreshDirectives", js_directives); |
-} |
- |
-void CopresenceUIHandler::TokenTransmitted(const TransmittedToken& token) { |
- web_ui()->CallJavascriptFunctionUnsafe("updateTransmittedToken", |
- *FormatToken(token)); |
-} |
- |
-void CopresenceUIHandler::TokenReceived(const ReceivedToken& token) { |
- web_ui()->CallJavascriptFunctionUnsafe("updateReceivedToken", |
- *FormatToken(token)); |
-} |
- |
-void CopresenceUIHandler::HandlePopulateState(const ListValue* args) { |
- DCHECK(args->empty()); |
- DirectivesUpdated(); |
- // TODO(ckehoe): Pass tokens to JS as a batch. |
- for (const auto& token_entry : state_->transmitted_tokens()) |
- TokenTransmitted(token_entry.second); |
- for (const auto& token_entry : state_->received_tokens()) |
- TokenReceived(token_entry.second); |
-} |
- |
-void CopresenceUIHandler::HandleClearState(const ListValue* args) { |
- DCHECK(args->empty()); |
- |
- CopresenceService* service = GetCopresenceService(web_ui()); |
- DCHECK(service); |
- service->ResetState(); |
- |
- // CopresenceService::ResetState() deletes the CopresenceState object |
- // we were using. We have to get the new one and reconnect to it. |
- state_ = GetCopresenceState(service); |
- DCHECK(state_); |
- state_->AddObserver(this); |
- |
- web_ui()->CallJavascriptFunctionUnsafe("clearTokens"); |
- DirectivesUpdated(); |
-} |