diff options
author | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-18 18:38:09 +0000 |
---|---|---|
committer | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-18 18:38:09 +0000 |
commit | 8a58f9a5e0b7e62d38ceef9c6a3b691a8593e7d9 (patch) | |
tree | 36f7876f1b49e7edf492198c79a587090e7e6233 /chrome/common/extensions/extension_localization_peer.cc | |
parent | 6e42e7275a6eb6d374e74367aa6c55c1df36568a (diff) | |
download | chromium_src-8a58f9a5e0b7e62d38ceef9c6a3b691a8593e7d9.zip chromium_src-8a58f9a5e0b7e62d38ceef9c6a3b691a8593e7d9.tar.gz chromium_src-8a58f9a5e0b7e62d38ceef9c6a3b691a8593e7d9.tar.bz2 |
Remove the mostly-unused FilterPolicy class. Convert the only actually-used bit, FILTER_EXTENSION_MESSAGES, into a bool that's only passed to places that really need it.
Also renames ExtensionMessageFilterPeer to ExtensionLocalizationPeer in hopes of making its one use more apparent. I added a couple comments too.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/2105006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47533 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/extensions/extension_localization_peer.cc')
-rw-r--r-- | chrome/common/extensions/extension_localization_peer.cc | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/chrome/common/extensions/extension_localization_peer.cc b/chrome/common/extensions/extension_localization_peer.cc new file mode 100644 index 0000000..36e44ce --- /dev/null +++ b/chrome/common/extensions/extension_localization_peer.cc @@ -0,0 +1,123 @@ +// Copyright (c) 2010 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/common/extensions/extension_localization_peer.h" + +#include "app/l10n_util.h" +#include "base/string_util.h" +#include "chrome/common/extensions/extension_message_bundle.h" +#include "chrome/common/render_messages.h" +#include "chrome/common/url_constants.h" +#include "grit/generated_resources.h" +#include "grit/renderer_resources.h" +#include "net/base/net_errors.h" +#include "net/http/http_response_headers.h" +#include "webkit/glue/webkit_glue.h" + +ExtensionLocalizationPeer::ExtensionLocalizationPeer( + webkit_glue::ResourceLoaderBridge::Peer* peer, + IPC::Message::Sender* message_sender, + const GURL& request_url) + : original_peer_(peer), + message_sender_(message_sender), + request_url_(request_url) { +} + +ExtensionLocalizationPeer::~ExtensionLocalizationPeer() { +} + +// static +ExtensionLocalizationPeer* +ExtensionLocalizationPeer::CreateExtensionLocalizationPeer( + webkit_glue::ResourceLoaderBridge::Peer* peer, + IPC::Message::Sender* message_sender, + const std::string& mime_type, + const GURL& request_url) { + // Return NULL if content is not text/css or it doesn't belong to extension + // scheme. + return (request_url.SchemeIs(chrome::kExtensionScheme) && + StartsWithASCII(mime_type, "text/css", false)) ? + new ExtensionLocalizationPeer(peer, message_sender, request_url) : NULL; +} + +void ExtensionLocalizationPeer::OnUploadProgress( + uint64 position, uint64 size) { + NOTREACHED(); +} + +bool ExtensionLocalizationPeer::OnReceivedRedirect( + const GURL& new_url, + const webkit_glue::ResourceLoaderBridge::ResponseInfo& info, + bool* has_new_first_party_for_cookies, + GURL* new_first_party_for_cookies) { + NOTREACHED(); + return false; +} + +void ExtensionLocalizationPeer::OnReceivedResponse( + const webkit_glue::ResourceLoaderBridge::ResponseInfo& info, + bool content_filtered) { + response_info_ = info; +} + +void ExtensionLocalizationPeer::OnReceivedData(const char* data, int len) { + data_.append(data, len); +} + +void ExtensionLocalizationPeer::OnCompletedRequest( + const URLRequestStatus& status, const std::string& security_info) { + // Make sure we delete ourselves at the end of this call. + scoped_ptr<ExtensionLocalizationPeer> this_deleter(this); + + // Give sub-classes a chance at altering the data. + if (status.status() != URLRequestStatus::SUCCESS) { + // We failed to load the resource. + original_peer_->OnReceivedResponse(response_info_, true); + URLRequestStatus status(URLRequestStatus::CANCELED, net::ERR_ABORTED); + original_peer_->OnCompletedRequest(status, security_info); + return; + } + + ReplaceMessages(); + + original_peer_->OnReceivedResponse(response_info_, true); + if (!data_.empty()) + original_peer_->OnReceivedData(data_.data(), + static_cast<int>(data_.size())); + original_peer_->OnCompletedRequest(status, security_info); +} + +GURL ExtensionLocalizationPeer::GetURLForDebugging() const { + return original_peer_->GetURLForDebugging(); +} + +void ExtensionLocalizationPeer::ReplaceMessages() { + if (!message_sender_ || data_.empty()) + return; + + if (!request_url_.is_valid()) + return; + + std::string extension_id = request_url_.host(); + L10nMessagesMap* l10n_messages = GetL10nMessagesMap(extension_id); + if (!l10n_messages) { + L10nMessagesMap messages; + message_sender_->Send(new ViewHostMsg_GetExtensionMessageBundle( + extension_id, &messages)); + + // Save messages we got, so we don't have to ask again. + // Messages map is never empty, it contains at least @@extension_id value. + ExtensionToL10nMessagesMap& l10n_messages_map = + *GetExtensionToL10nMessagesMap(); + l10n_messages_map[extension_id] = messages; + + l10n_messages = GetL10nMessagesMap(extension_id); + } + + std::string error; + if (ExtensionMessageBundle::ReplaceMessagesWithExternalDictionary( + *l10n_messages, &data_, &error)) { + data_.resize(data_.size()); + } +} |