diff options
Diffstat (limited to 'chrome/browser/ui/webui/identity_internals_ui.cc')
-rw-r--r-- | chrome/browser/ui/webui/identity_internals_ui.cc | 314 |
1 files changed, 0 insertions, 314 deletions
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 16607b1..0000000 --- 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() {} |