summaryrefslogtreecommitdiffstats
path: root/chrome/common/extensions/extension_localization_peer.cc
diff options
context:
space:
mode:
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-18 18:38:09 +0000
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-18 18:38:09 +0000
commit8a58f9a5e0b7e62d38ceef9c6a3b691a8593e7d9 (patch)
tree36f7876f1b49e7edf492198c79a587090e7e6233 /chrome/common/extensions/extension_localization_peer.cc
parent6e42e7275a6eb6d374e74367aa6c55c1df36568a (diff)
downloadchromium_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.cc123
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());
+ }
+}