| Index: chrome/browser/ui/webui/identity_internals_ui.cc
|
| diff --git a/chrome/browser/ui/webui/identity_internals_ui.cc b/chrome/browser/ui/webui/identity_internals_ui.cc
|
| deleted file mode 100644
|
| index 16607b15551a989805f9f83d21d6ad98b92cc2c2..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/webui/identity_internals_ui.cc
|
| +++ /dev/null
|
| @@ -1,314 +0,0 @@
|
| -// Copyright 2013 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/identity_internals_ui.h"
|
| -
|
| -#include <set>
|
| -#include <string>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/i18n/time_formatting.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "base/values.h"
|
| -#include "chrome/browser/extensions/api/identity/identity_api.h"
|
| -#include "chrome/browser/extensions/extension_service.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/common/url_constants.h"
|
| -#include "content/public/browser/web_ui.h"
|
| -#include "content/public/browser/web_ui_controller.h"
|
| -#include "content/public/browser/web_ui_data_source.h"
|
| -#include "content/public/browser/web_ui_message_handler.h"
|
| -#include "extensions/browser/extension_system.h"
|
| -#include "google_apis/gaia/gaia_auth_fetcher.h"
|
| -#include "google_apis/gaia/gaia_constants.h"
|
| -#include "grit/browser_resources.h"
|
| -#include "grit/generated_resources.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -
|
| -namespace {
|
| -
|
| -// Properties of the Javascript object representing a token.
|
| -const char kExtensionId[] = "extensionId";
|
| -const char kExtensionName[] = "extensionName";
|
| -const char kScopes[] = "scopes";
|
| -const char kStatus[] = "status";
|
| -const char kTokenExpirationTime[] = "expirationTime";
|
| -const char kAccessToken[] = "accessToken";
|
| -
|
| -// RevokeToken message parameter offsets.
|
| -const int kRevokeTokenExtensionOffset = 0;
|
| -const int kRevokeTokenTokenOffset = 1;
|
| -
|
| -class IdentityInternalsTokenRevoker;
|
| -
|
| -// Class acting as a controller of the chrome://identity-internals WebUI.
|
| -class IdentityInternalsUIMessageHandler : public content::WebUIMessageHandler {
|
| - public:
|
| - IdentityInternalsUIMessageHandler();
|
| - virtual ~IdentityInternalsUIMessageHandler();
|
| -
|
| - // Ensures that a proper clean up happens after a token is revoked. That
|
| - // includes deleting the |token_revoker|, removing the token from Identity API
|
| - // cache and updating the UI that the token is gone.
|
| - void OnTokenRevokerDone(IdentityInternalsTokenRevoker* token_revoker);
|
| -
|
| - // WebUIMessageHandler implementation.
|
| - virtual void RegisterMessages() OVERRIDE;
|
| -
|
| - private:
|
| - // Gets the name of an extension referred to by |token_cache_key| as a string.
|
| - const std::string GetExtensionName(
|
| - const extensions::ExtensionTokenKey& token_cache_key);
|
| -
|
| - // Gets a list of scopes specified in |token_cache_key| and returns a pointer
|
| - // to a ListValue containing the scopes. The caller gets ownership of the
|
| - // returned object.
|
| - base::ListValue* GetScopes(
|
| - const extensions::ExtensionTokenKey& token_cache_key);
|
| -
|
| - // Gets a localized status of the access token in |token_cache_value|.
|
| - const base::string16 GetStatus(
|
| - const extensions::IdentityTokenCacheValue& token_cache_value);
|
| -
|
| - // Gets a string representation of an expiration time of the access token in
|
| - // |token_cache_value|.
|
| - const std::string GetExpirationTime(
|
| - const extensions::IdentityTokenCacheValue& token_cache_value);
|
| -
|
| - // Converts a pair of |token_cache_key| and |token_cache_value| to a
|
| - // DictionaryValue object with corresponding information in a localized and
|
| - // readable form and returns a pointer to created object. Caller gets the
|
| - // ownership of the returned object.
|
| - base::DictionaryValue* GetInfoForToken(
|
| - const extensions::ExtensionTokenKey& token_cache_key,
|
| - const extensions::IdentityTokenCacheValue& token_cache_value);
|
| -
|
| - // Gets all of the tokens stored in IdentityAPI token cache and returns them
|
| - // to the caller using Javascript callback function
|
| - // |identity_internals.returnTokens()|.
|
| - void GetInfoForAllTokens(const base::ListValue* args);
|
| -
|
| - // Initiates revoking of the token, based on the extension ID and token
|
| - // passed as entries in the |args| list. Updates the caller of completion
|
| - // using Javascript callback function |identity_internals.tokenRevokeDone()|.
|
| - void RevokeToken(const base::ListValue* args);
|
| -
|
| - // A vector of token revokers that are currently revoking tokens.
|
| - ScopedVector<IdentityInternalsTokenRevoker> token_revokers_;
|
| -};
|
| -
|
| -// Handles the revoking of an access token and helps performing the clean up
|
| -// after it is revoked by holding information about the access token and related
|
| -// extension ID.
|
| -class IdentityInternalsTokenRevoker : public GaiaAuthConsumer {
|
| - public:
|
| - // Revokes |access_token| from extension with |extension_id|.
|
| - // |profile| is required for its request context. |consumer| will be
|
| - // notified when revocation succeeds via |OnTokenRevokerDone()|.
|
| - IdentityInternalsTokenRevoker(const std::string& extension_id,
|
| - const std::string& access_token,
|
| - Profile* profile,
|
| - IdentityInternalsUIMessageHandler* consumer);
|
| - virtual ~IdentityInternalsTokenRevoker();
|
| -
|
| - // Returns the access token being revoked.
|
| - const std::string& access_token() const { return access_token_; }
|
| -
|
| - // Returns the ID of the extension the access token is related to.
|
| - const std::string& extension_id() const { return extension_id_; }
|
| -
|
| - // GaiaAuthConsumer implementation.
|
| - virtual void OnOAuth2RevokeTokenCompleted() OVERRIDE;
|
| -
|
| - private:
|
| - // An object used to start a token revoke request.
|
| - GaiaAuthFetcher fetcher_;
|
| - // An ID of an extension the access token is related to.
|
| - const std::string extension_id_;
|
| - // The access token to revoke.
|
| - const std::string access_token_;
|
| - // An object that needs to be notified once the access token is revoked.
|
| - IdentityInternalsUIMessageHandler* consumer_; // weak.
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(IdentityInternalsTokenRevoker);
|
| -};
|
| -
|
| -IdentityInternalsUIMessageHandler::IdentityInternalsUIMessageHandler() {}
|
| -
|
| -IdentityInternalsUIMessageHandler::~IdentityInternalsUIMessageHandler() {}
|
| -
|
| -void IdentityInternalsUIMessageHandler::OnTokenRevokerDone(
|
| - IdentityInternalsTokenRevoker* token_revoker) {
|
| - // Remove token from the cache.
|
| - extensions::IdentityAPI::GetFactoryInstance()
|
| - ->Get(Profile::FromWebUI(web_ui()))
|
| - ->EraseCachedToken(token_revoker->extension_id(),
|
| - token_revoker->access_token());
|
| -
|
| - // Update view about the token being removed.
|
| - base::ListValue result;
|
| - result.AppendString(token_revoker->access_token());
|
| - web_ui()->CallJavascriptFunction("identity_internals.tokenRevokeDone",
|
| - result);
|
| -
|
| - // Erase the revoker.
|
| - ScopedVector<IdentityInternalsTokenRevoker>::iterator iter =
|
| - std::find(token_revokers_.begin(), token_revokers_.end(), token_revoker);
|
| - DCHECK(iter != token_revokers_.end());
|
| - token_revokers_.erase(iter);
|
| -}
|
| -
|
| -const std::string IdentityInternalsUIMessageHandler::GetExtensionName(
|
| - const extensions::ExtensionTokenKey& token_cache_key) {
|
| - ExtensionService* extension_service = extensions::ExtensionSystem::Get(
|
| - Profile::FromWebUI(web_ui()))->extension_service();
|
| - const extensions::Extension* extension =
|
| - extension_service->extensions()->GetByID(token_cache_key.extension_id);
|
| - if (!extension)
|
| - return std::string();
|
| - return extension->name();
|
| -}
|
| -
|
| -base::ListValue* IdentityInternalsUIMessageHandler::GetScopes(
|
| - const extensions::ExtensionTokenKey& token_cache_key) {
|
| - base::ListValue* scopes_value = new base::ListValue();
|
| - for (std::set<std::string>::const_iterator
|
| - iter = token_cache_key.scopes.begin();
|
| - iter != token_cache_key.scopes.end(); ++iter) {
|
| - scopes_value->AppendString(*iter);
|
| - }
|
| - return scopes_value;
|
| -}
|
| -
|
| -const base::string16 IdentityInternalsUIMessageHandler::GetStatus(
|
| - const extensions::IdentityTokenCacheValue& token_cache_value) {
|
| - switch (token_cache_value.status()) {
|
| - case extensions::IdentityTokenCacheValue::CACHE_STATUS_ADVICE:
|
| - // Fallthrough to NOT FOUND case, as ADVICE is short lived.
|
| - case extensions::IdentityTokenCacheValue::CACHE_STATUS_NOTFOUND:
|
| - return l10n_util::GetStringUTF16(
|
| - IDS_IDENTITY_INTERNALS_TOKEN_NOT_FOUND);
|
| - case extensions::IdentityTokenCacheValue::CACHE_STATUS_TOKEN:
|
| - return l10n_util::GetStringUTF16(
|
| - IDS_IDENTITY_INTERNALS_TOKEN_PRESENT);
|
| - }
|
| - NOTREACHED();
|
| - return base::string16();
|
| -}
|
| -
|
| -const std::string IdentityInternalsUIMessageHandler::GetExpirationTime(
|
| - const extensions::IdentityTokenCacheValue& token_cache_value) {
|
| - return base::UTF16ToUTF8(base::TimeFormatFriendlyDateAndTime(
|
| - token_cache_value.expiration_time()));
|
| -}
|
| -
|
| -base::DictionaryValue* IdentityInternalsUIMessageHandler::GetInfoForToken(
|
| - const extensions::ExtensionTokenKey& token_cache_key,
|
| - const extensions::IdentityTokenCacheValue& token_cache_value) {
|
| - base::DictionaryValue* token_data = new base::DictionaryValue();
|
| - token_data->SetString(kExtensionId, token_cache_key.extension_id);
|
| - token_data->SetString(kExtensionName, GetExtensionName(token_cache_key));
|
| - token_data->Set(kScopes, GetScopes(token_cache_key));
|
| - token_data->SetString(kStatus, GetStatus(token_cache_value));
|
| - token_data->SetString(kAccessToken, token_cache_value.token());
|
| - token_data->SetString(kTokenExpirationTime,
|
| - GetExpirationTime(token_cache_value));
|
| - return token_data;
|
| -}
|
| -
|
| -void IdentityInternalsUIMessageHandler::GetInfoForAllTokens(
|
| - const base::ListValue* args) {
|
| - base::ListValue results;
|
| - extensions::IdentityAPI::CachedTokens tokens =
|
| - extensions::IdentityAPI::GetFactoryInstance()
|
| - ->Get(Profile::FromWebUI(web_ui()))
|
| - ->GetAllCachedTokens();
|
| - for (extensions::IdentityAPI::CachedTokens::const_iterator
|
| - iter = tokens.begin(); iter != tokens.end(); ++iter) {
|
| - results.Append(GetInfoForToken(iter->first, iter->second));
|
| - }
|
| -
|
| - web_ui()->CallJavascriptFunction("identity_internals.returnTokens", results);
|
| -}
|
| -
|
| -void IdentityInternalsUIMessageHandler::RegisterMessages() {
|
| - web_ui()->RegisterMessageCallback("identityInternalsGetTokens",
|
| - base::Bind(&IdentityInternalsUIMessageHandler::GetInfoForAllTokens,
|
| - base::Unretained(this)));
|
| - web_ui()->RegisterMessageCallback("identityInternalsRevokeToken",
|
| - base::Bind(&IdentityInternalsUIMessageHandler::RevokeToken,
|
| - base::Unretained(this)));
|
| -}
|
| -
|
| -void IdentityInternalsUIMessageHandler::RevokeToken(
|
| - const base::ListValue* args) {
|
| - std::string extension_id;
|
| - std::string access_token;
|
| - args->GetString(kRevokeTokenExtensionOffset, &extension_id);
|
| - args->GetString(kRevokeTokenTokenOffset, &access_token);
|
| - token_revokers_.push_back(new IdentityInternalsTokenRevoker(
|
| - extension_id, access_token, Profile::FromWebUI(web_ui()), this));
|
| -}
|
| -
|
| -IdentityInternalsTokenRevoker::IdentityInternalsTokenRevoker(
|
| - const std::string& extension_id,
|
| - const std::string& access_token,
|
| - Profile* profile,
|
| - IdentityInternalsUIMessageHandler* consumer)
|
| - : fetcher_(this, GaiaConstants::kChromeSource,
|
| - profile->GetRequestContext()),
|
| - extension_id_(extension_id),
|
| - access_token_(access_token),
|
| - consumer_(consumer) {
|
| - DCHECK(consumer_);
|
| - fetcher_.StartRevokeOAuth2Token(access_token);
|
| -}
|
| -
|
| -IdentityInternalsTokenRevoker::~IdentityInternalsTokenRevoker() {}
|
| -
|
| -void IdentityInternalsTokenRevoker::OnOAuth2RevokeTokenCompleted() {
|
| - consumer_->OnTokenRevokerDone(this);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -IdentityInternalsUI::IdentityInternalsUI(content::WebUI* web_ui)
|
| - : content::WebUIController(web_ui) {
|
| - // chrome://identity-internals source.
|
| - content::WebUIDataSource* html_source =
|
| - content::WebUIDataSource::Create(chrome::kChromeUIIdentityInternalsHost);
|
| - html_source->SetUseJsonJSFormatV2();
|
| -
|
| - // Localized strings
|
| - html_source->AddLocalizedString("tokenCacheHeader",
|
| - IDS_IDENTITY_INTERNALS_TOKEN_CACHE_TEXT);
|
| - html_source->AddLocalizedString("accessToken",
|
| - IDS_IDENTITY_INTERNALS_ACCESS_TOKEN);
|
| - html_source->AddLocalizedString("extensionName",
|
| - IDS_IDENTITY_INTERNALS_EXTENSION_NAME);
|
| - html_source->AddLocalizedString("extensionId",
|
| - IDS_IDENTITY_INTERNALS_EXTENSION_ID);
|
| - html_source->AddLocalizedString("tokenStatus",
|
| - IDS_IDENTITY_INTERNALS_TOKEN_STATUS);
|
| - html_source->AddLocalizedString("expirationTime",
|
| - IDS_IDENTITY_INTERNALS_EXPIRATION_TIME);
|
| - html_source->AddLocalizedString("scopes",
|
| - IDS_IDENTITY_INTERNALS_SCOPES);
|
| - html_source->AddLocalizedString("revoke",
|
| - IDS_IDENTITY_INTERNALS_REVOKE);
|
| - html_source->SetJsonPath("strings.js");
|
| -
|
| - // Required resources
|
| - html_source->AddResourcePath("identity_internals.css",
|
| - IDR_IDENTITY_INTERNALS_CSS);
|
| - html_source->AddResourcePath("identity_internals.js",
|
| - IDR_IDENTITY_INTERNALS_JS);
|
| - html_source->SetDefaultResource(IDR_IDENTITY_INTERNALS_HTML);
|
| -
|
| - content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), html_source);
|
| -
|
| - web_ui->AddMessageHandler(new IdentityInternalsUIMessageHandler());
|
| -}
|
| -
|
| -IdentityInternalsUI::~IdentityInternalsUI() {}
|
|
|