summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_cookies_api.cc
diff options
context:
space:
mode:
authorjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-10 13:14:44 +0000
committerjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-10 13:14:44 +0000
commit2c5e1e131287e37ab5d837a271ab3e55cea06120 (patch)
tree5c5a43169fb13dcc75039c528709a9479a761596 /chrome/browser/extensions/extension_cookies_api.cc
parent2ec79f7df2ebb464ddb187f65fae631d54408d04 (diff)
downloadchromium_src-2c5e1e131287e37ab5d837a271ab3e55cea06120.zip
chromium_src-2c5e1e131287e37ab5d837a271ab3e55cea06120.tar.gz
chromium_src-2c5e1e131287e37ab5d837a271ab3e55cea06120.tar.bz2
Send event on changes to the cookie monster.
BUG=38398 TEST=*.CookiesEvents Review URL: http://codereview.chromium.org/2703004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49390 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_cookies_api.cc')
-rw-r--r--chrome/browser/extensions/extension_cookies_api.cc62
1 files changed, 62 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extension_cookies_api.cc b/chrome/browser/extensions/extension_cookies_api.cc
index d9b46df..0cf9b07 100644
--- a/chrome/browser/extensions/extension_cookies_api.cc
+++ b/chrome/browser/extensions/extension_cookies_api.cc
@@ -6,16 +6,78 @@
#include "chrome/browser/extensions/extension_cookies_api.h"
+#include "base/json/json_writer.h"
#include "chrome/browser/browser_list.h"
#include "chrome/browser/extensions/extension_cookies_api_constants.h"
#include "chrome/browser/extensions/extension_cookies_helpers.h"
+#include "chrome/browser/extensions/extension_message_service.h"
#include "chrome/browser/profile.h"
#include "chrome/common/extensions/extension_error_utils.h"
#include "chrome/common/net/url_request_context_getter.h"
+#include "chrome/common/notification_type.h"
+#include "chrome/common/notification_service.h"
#include "net/base/cookie_monster.h"
namespace keys = extension_cookies_api_constants;
+// static
+ExtensionCookiesEventRouter* ExtensionCookiesEventRouter::GetInstance() {
+ return Singleton<ExtensionCookiesEventRouter>::get();
+}
+
+void ExtensionCookiesEventRouter::Init() {
+ if (registrar_.IsEmpty()) {
+ registrar_.Add(this,
+ NotificationType::COOKIE_CHANGED,
+ NotificationService::AllSources());
+ }
+}
+
+void ExtensionCookiesEventRouter::Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ switch (type.value) {
+ case NotificationType::COOKIE_CHANGED:
+ CookieChanged(
+ Source<Profile>(source).ptr(),
+ Details<ChromeCookieDetails>(details).ptr());
+ break;
+
+ default:
+ NOTREACHED();
+ }
+}
+
+void ExtensionCookiesEventRouter::CookieChanged(
+ Profile* profile,
+ ChromeCookieDetails* details) {
+ ListValue args;
+ DictionaryValue* dict = new DictionaryValue();
+ dict->SetBoolean(keys::kRemovedKey, details->removed);
+ dict->Set(
+ keys::kCookieKey,
+ extension_cookies_helpers::CreateCookieValue(*details->cookie_pair,
+ extension_cookies_helpers::GetStoreIdFromProfile(profile)));
+ args.Append(dict);
+
+ std::string json_args;
+ base::JSONWriter::Write(&args, false, &json_args);
+ GURL cookie_domain =
+ extension_cookies_helpers::GetURLFromCookiePair(*details->cookie_pair);
+ LOG(WARNING) << "Sending cookie " << json_args;
+ DispatchEvent(profile, keys::kOnChanged, json_args, cookie_domain);
+}
+
+void ExtensionCookiesEventRouter::DispatchEvent(Profile* profile,
+ const char* event_name,
+ const std::string& json_args,
+ GURL& cookie_domain) {
+ if (profile && profile->GetExtensionMessageService()) {
+ profile->GetExtensionMessageService()->DispatchEventToRenderers(
+ event_name, json_args, profile->IsOffTheRecord(), cookie_domain);
+ }
+}
+
bool CookiesFunction::ParseUrl(const DictionaryValue* details, GURL* url,
bool check_host_permissions) {
DCHECK(details && url);