Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/bookmarks/bookmark_extension_api.h" | 5 #include "chrome/browser/bookmarks/bookmark_extension_api.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/file_path.h" | 8 #include "base/file_path.h" |
| 9 #include "base/i18n/file_util_icu.h" | 9 #include "base/i18n/file_util_icu.h" |
| 10 #include "base/i18n/time_formatting.h" | 10 #include "base/i18n/time_formatting.h" |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 136 BookmarkExtensionEventRouter::~BookmarkExtensionEventRouter() { | 136 BookmarkExtensionEventRouter::~BookmarkExtensionEventRouter() { |
| 137 if (model_) { | 137 if (model_) { |
| 138 model_->RemoveObserver(this); | 138 model_->RemoveObserver(this); |
| 139 } | 139 } |
| 140 } | 140 } |
| 141 | 141 |
| 142 void BookmarkExtensionEventRouter::Init() { | 142 void BookmarkExtensionEventRouter::Init() { |
| 143 model_->AddObserver(this); | 143 model_->AddObserver(this); |
| 144 } | 144 } |
| 145 | 145 |
| 146 void BookmarkExtensionEventRouter::DispatchEvent(Profile *profile, | 146 void BookmarkExtensionEventRouter::DispatchEvent(Profile* profile, |
|
miket_OOO
2012/07/10 22:33:19
Well done.
| |
| 147 const char* event_name, | 147 const char* event_name, |
| 148 const std::string& json_args) { | 148 ListValue* event_args) { |
| 149 if (profile->GetExtensionEventRouter()) { | 149 if (profile->GetExtensionEventRouter()) { |
| 150 profile->GetExtensionEventRouter()->DispatchEventToRenderers( | 150 profile->GetExtensionEventRouter()->DispatchEventToRenderers( |
| 151 event_name, json_args, NULL, GURL(), extensions::EventFilteringInfo()); | 151 event_name, event_args, NULL, GURL(), extensions::EventFilteringInfo()); |
| 152 } | 152 } |
| 153 } | 153 } |
| 154 | 154 |
| 155 void BookmarkExtensionEventRouter::Loaded(BookmarkModel* model, | 155 void BookmarkExtensionEventRouter::Loaded(BookmarkModel* model, |
| 156 bool ids_reassigned) { | 156 bool ids_reassigned) { |
| 157 // TODO(erikkay): Perhaps we should send this event down to the extension | 157 // TODO(erikkay): Perhaps we should send this event down to the extension |
| 158 // so they know when it's safe to use the API? | 158 // so they know when it's safe to use the API? |
| 159 } | 159 } |
| 160 | 160 |
| 161 void BookmarkExtensionEventRouter::BookmarkModelBeingDeleted( | 161 void BookmarkExtensionEventRouter::BookmarkModelBeingDeleted( |
| 162 BookmarkModel* model) { | 162 BookmarkModel* model) { |
| 163 model_ = NULL; | 163 model_ = NULL; |
| 164 } | 164 } |
| 165 | 165 |
| 166 void BookmarkExtensionEventRouter::BookmarkNodeMoved( | 166 void BookmarkExtensionEventRouter::BookmarkNodeMoved( |
| 167 BookmarkModel* model, | 167 BookmarkModel* model, |
| 168 const BookmarkNode* old_parent, | 168 const BookmarkNode* old_parent, |
| 169 int old_index, | 169 int old_index, |
| 170 const BookmarkNode* new_parent, | 170 const BookmarkNode* new_parent, |
| 171 int new_index) { | 171 int new_index) { |
| 172 ListValue args; | 172 ListValue* args = new ListValue(); |
| 173 const BookmarkNode* node = new_parent->GetChild(new_index); | 173 const BookmarkNode* node = new_parent->GetChild(new_index); |
| 174 args.Append(new StringValue(base::Int64ToString(node->id()))); | 174 args->Append(new StringValue(base::Int64ToString(node->id()))); |
| 175 DictionaryValue* object_args = new DictionaryValue(); | 175 DictionaryValue* object_args = new DictionaryValue(); |
| 176 object_args->SetString(keys::kParentIdKey, | 176 object_args->SetString(keys::kParentIdKey, |
| 177 base::Int64ToString(new_parent->id())); | 177 base::Int64ToString(new_parent->id())); |
| 178 object_args->SetInteger(keys::kIndexKey, new_index); | 178 object_args->SetInteger(keys::kIndexKey, new_index); |
| 179 object_args->SetString(keys::kOldParentIdKey, | 179 object_args->SetString(keys::kOldParentIdKey, |
| 180 base::Int64ToString(old_parent->id())); | 180 base::Int64ToString(old_parent->id())); |
| 181 object_args->SetInteger(keys::kOldIndexKey, old_index); | 181 object_args->SetInteger(keys::kOldIndexKey, old_index); |
| 182 args.Append(object_args); | 182 args->Append(object_args); |
| 183 | 183 |
| 184 std::string json_args; | 184 DispatchEvent(model->profile(), keys::kOnBookmarkMoved, args); |
| 185 base::JSONWriter::Write(&args, &json_args); | |
| 186 DispatchEvent(model->profile(), keys::kOnBookmarkMoved, json_args); | |
| 187 } | 185 } |
| 188 | 186 |
| 189 void BookmarkExtensionEventRouter::BookmarkNodeAdded(BookmarkModel* model, | 187 void BookmarkExtensionEventRouter::BookmarkNodeAdded(BookmarkModel* model, |
| 190 const BookmarkNode* parent, | 188 const BookmarkNode* parent, |
| 191 int index) { | 189 int index) { |
| 192 ListValue args; | 190 ListValue* args = new ListValue(); |
| 193 const BookmarkNode* node = parent->GetChild(index); | 191 const BookmarkNode* node = parent->GetChild(index); |
| 194 args.Append(new StringValue(base::Int64ToString(node->id()))); | 192 args->Append(new StringValue(base::Int64ToString(node->id()))); |
| 195 DictionaryValue* obj = | 193 DictionaryValue* obj = |
| 196 bookmark_extension_helpers::GetNodeDictionary(node, false, false); | 194 bookmark_extension_helpers::GetNodeDictionary(node, false, false); |
| 197 args.Append(obj); | 195 args->Append(obj); |
| 198 | 196 |
| 199 std::string json_args; | 197 DispatchEvent(model->profile(), keys::kOnBookmarkCreated, args); |
| 200 base::JSONWriter::Write(&args, &json_args); | |
| 201 DispatchEvent(model->profile(), keys::kOnBookmarkCreated, json_args); | |
| 202 } | 198 } |
| 203 | 199 |
| 204 void BookmarkExtensionEventRouter::BookmarkNodeRemoved( | 200 void BookmarkExtensionEventRouter::BookmarkNodeRemoved( |
| 205 BookmarkModel* model, | 201 BookmarkModel* model, |
| 206 const BookmarkNode* parent, | 202 const BookmarkNode* parent, |
| 207 int index, | 203 int index, |
| 208 const BookmarkNode* node) { | 204 const BookmarkNode* node) { |
| 209 ListValue args; | 205 ListValue* args = new ListValue(); |
| 210 args.Append(new StringValue(base::Int64ToString(node->id()))); | 206 args->Append(new StringValue(base::Int64ToString(node->id()))); |
| 211 DictionaryValue* object_args = new DictionaryValue(); | 207 DictionaryValue* object_args = new DictionaryValue(); |
| 212 object_args->SetString(keys::kParentIdKey, | 208 object_args->SetString(keys::kParentIdKey, |
| 213 base::Int64ToString(parent->id())); | 209 base::Int64ToString(parent->id())); |
| 214 object_args->SetInteger(keys::kIndexKey, index); | 210 object_args->SetInteger(keys::kIndexKey, index); |
| 215 args.Append(object_args); | 211 args->Append(object_args); |
| 216 | 212 |
| 217 std::string json_args; | 213 DispatchEvent(model->profile(), keys::kOnBookmarkRemoved, args); |
| 218 base::JSONWriter::Write(&args, &json_args); | |
| 219 DispatchEvent(model->profile(), keys::kOnBookmarkRemoved, json_args); | |
| 220 } | 214 } |
| 221 | 215 |
| 222 void BookmarkExtensionEventRouter::BookmarkNodeChanged( | 216 void BookmarkExtensionEventRouter::BookmarkNodeChanged( |
| 223 BookmarkModel* model, const BookmarkNode* node) { | 217 BookmarkModel* model, const BookmarkNode* node) { |
| 224 ListValue args; | 218 ListValue* args = new ListValue(); |
| 225 args.Append(new StringValue(base::Int64ToString(node->id()))); | 219 args->Append(new StringValue(base::Int64ToString(node->id()))); |
| 226 | 220 |
| 227 // TODO(erikkay) The only three things that BookmarkModel sends this | 221 // TODO(erikkay) The only three things that BookmarkModel sends this |
| 228 // notification for are title, url and favicon. Since we're currently | 222 // notification for are title, url and favicon. Since we're currently |
| 229 // ignoring favicon and since the notification doesn't say which one anyway, | 223 // ignoring favicon and since the notification doesn't say which one anyway, |
| 230 // for now we only include title and url. The ideal thing would be to change | 224 // for now we only include title and url. The ideal thing would be to change |
| 231 // BookmarkModel to indicate what changed. | 225 // BookmarkModel to indicate what changed. |
| 232 DictionaryValue* object_args = new DictionaryValue(); | 226 DictionaryValue* object_args = new DictionaryValue(); |
| 233 object_args->SetString(keys::kTitleKey, node->GetTitle()); | 227 object_args->SetString(keys::kTitleKey, node->GetTitle()); |
| 234 if (node->is_url()) | 228 if (node->is_url()) |
| 235 object_args->SetString(keys::kUrlKey, node->url().spec()); | 229 object_args->SetString(keys::kUrlKey, node->url().spec()); |
| 236 args.Append(object_args); | 230 args->Append(object_args); |
| 237 | 231 |
| 238 std::string json_args; | 232 DispatchEvent(model->profile(), keys::kOnBookmarkChanged, args); |
| 239 base::JSONWriter::Write(&args, &json_args); | |
| 240 DispatchEvent(model->profile(), keys::kOnBookmarkChanged, json_args); | |
| 241 } | 233 } |
| 242 | 234 |
| 243 void BookmarkExtensionEventRouter::BookmarkNodeFaviconChanged( | 235 void BookmarkExtensionEventRouter::BookmarkNodeFaviconChanged( |
| 244 BookmarkModel* model, const BookmarkNode* node) { | 236 BookmarkModel* model, const BookmarkNode* node) { |
| 245 // TODO(erikkay) anything we should do here? | 237 // TODO(erikkay) anything we should do here? |
| 246 } | 238 } |
| 247 | 239 |
| 248 void BookmarkExtensionEventRouter::BookmarkNodeChildrenReordered( | 240 void BookmarkExtensionEventRouter::BookmarkNodeChildrenReordered( |
| 249 BookmarkModel* model, const BookmarkNode* node) { | 241 BookmarkModel* model, const BookmarkNode* node) { |
| 250 ListValue args; | 242 ListValue* args = new ListValue(); |
| 251 args.Append(new StringValue(base::Int64ToString(node->id()))); | 243 args->Append(new StringValue(base::Int64ToString(node->id()))); |
| 252 int childCount = node->child_count(); | 244 int childCount = node->child_count(); |
| 253 ListValue* children = new ListValue(); | 245 ListValue* children = new ListValue(); |
| 254 for (int i = 0; i < childCount; ++i) { | 246 for (int i = 0; i < childCount; ++i) { |
| 255 const BookmarkNode* child = node->GetChild(i); | 247 const BookmarkNode* child = node->GetChild(i); |
| 256 Value* child_id = new StringValue(base::Int64ToString(child->id())); | 248 Value* child_id = new StringValue(base::Int64ToString(child->id())); |
| 257 children->Append(child_id); | 249 children->Append(child_id); |
| 258 } | 250 } |
| 259 DictionaryValue* reorder_info = new DictionaryValue(); | 251 DictionaryValue* reorder_info = new DictionaryValue(); |
| 260 reorder_info->Set(keys::kChildIdsKey, children); | 252 reorder_info->Set(keys::kChildIdsKey, children); |
| 261 args.Append(reorder_info); | 253 args->Append(reorder_info); |
| 262 | 254 |
| 263 std::string json_args; | 255 DispatchEvent(model->profile(), keys::kOnBookmarkChildrenReordered, args); |
| 264 base::JSONWriter::Write(&args, &json_args); | |
| 265 DispatchEvent(model->profile(), | |
| 266 keys::kOnBookmarkChildrenReordered, | |
| 267 json_args); | |
| 268 } | 256 } |
| 269 | 257 |
| 270 void BookmarkExtensionEventRouter:: | 258 void BookmarkExtensionEventRouter:: |
| 271 ExtensiveBookmarkChangesBeginning(BookmarkModel* model) { | 259 ExtensiveBookmarkChangesBeginning(BookmarkModel* model) { |
| 272 ListValue args; | 260 ListValue* args = new ListValue(); |
| 273 std::string json_args; | |
| 274 base::JSONWriter::Write(&args, &json_args); | |
| 275 DispatchEvent(model->profile(), | 261 DispatchEvent(model->profile(), |
| 276 keys::kOnBookmarkImportBegan, | 262 keys::kOnBookmarkImportBegan, |
| 277 json_args); | 263 args); |
| 278 } | 264 } |
| 279 | 265 |
| 280 void BookmarkExtensionEventRouter::ExtensiveBookmarkChangesEnded( | 266 void BookmarkExtensionEventRouter::ExtensiveBookmarkChangesEnded( |
| 281 BookmarkModel* model) { | 267 BookmarkModel* model) { |
| 282 ListValue args; | 268 ListValue* args = new ListValue(); |
| 283 std::string json_args; | |
| 284 base::JSONWriter::Write(&args, &json_args); | |
| 285 DispatchEvent(model->profile(), | 269 DispatchEvent(model->profile(), |
| 286 keys::kOnBookmarkImportEnded, | 270 keys::kOnBookmarkImportEnded, |
| 287 json_args); | 271 args); |
| 288 } | 272 } |
| 289 | 273 |
| 290 bool GetBookmarksFunction::RunImpl() { | 274 bool GetBookmarksFunction::RunImpl() { |
| 291 BookmarkModel* model = profile()->GetBookmarkModel(); | 275 BookmarkModel* model = profile()->GetBookmarkModel(); |
| 292 scoped_ptr<ListValue> json(new ListValue()); | 276 scoped_ptr<ListValue> json(new ListValue()); |
| 293 Value* arg0; | 277 Value* arg0; |
| 294 EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &arg0)); | 278 EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &arg0)); |
| 295 if (arg0->IsType(Value::TYPE_LIST)) { | 279 if (arg0->IsType(Value::TYPE_LIST)) { |
| 296 const ListValue* ids = static_cast<const ListValue*>(arg0); | 280 const ListValue* ids = static_cast<const ListValue*>(arg0); |
| 297 size_t count = ids->GetSize(); | 281 size_t count = ids->GetSize(); |
| (...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 945 int index, | 929 int index, |
| 946 void* params) { | 930 void* params) { |
| 947 #if !defined(OS_ANDROID) | 931 #if !defined(OS_ANDROID) |
| 948 // Android does not have support for the standard exporter. | 932 // Android does not have support for the standard exporter. |
| 949 // TODO(jgreenwald): remove ifdef once extensions are no longer built on | 933 // TODO(jgreenwald): remove ifdef once extensions are no longer built on |
| 950 // Android. | 934 // Android. |
| 951 bookmark_html_writer::WriteBookmarks(profile(), path, NULL); | 935 bookmark_html_writer::WriteBookmarks(profile(), path, NULL); |
| 952 #endif | 936 #endif |
| 953 Release(); // Balanced in BookmarksIOFunction::SelectFile() | 937 Release(); // Balanced in BookmarksIOFunction::SelectFile() |
| 954 } | 938 } |
| OLD | NEW |