Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: chrome/browser/extensions/extension_bookmarks_module.cc

Issue 591006: Make it so that chrome.bookmarks.update can update the URL of a bookmark.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/common/extensions/api/extension_api.json » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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/extensions/extension_bookmarks_module.h" 5 #include "chrome/browser/extensions/extension_bookmarks_module.h"
6 6
7 #include "base/json/json_writer.h" 7 #include "base/json/json_writer.h"
8 #include "base/sha1.h" 8 #include "base/sha1.h"
9 #include "base/stl_util-inl.h" 9 #include "base/stl_util-inl.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 std::string json_args; 231 std::string json_args;
232 base::JSONWriter::Write(&args, false, &json_args); 232 base::JSONWriter::Write(&args, false, &json_args);
233 DispatchEvent(model->profile(), keys::kOnBookmarkRemoved, json_args); 233 DispatchEvent(model->profile(), keys::kOnBookmarkRemoved, json_args);
234 } 234 }
235 235
236 void ExtensionBookmarkEventRouter::BookmarkNodeChanged( 236 void ExtensionBookmarkEventRouter::BookmarkNodeChanged(
237 BookmarkModel* model, const BookmarkNode* node) { 237 BookmarkModel* model, const BookmarkNode* node) {
238 ListValue args; 238 ListValue args;
239 args.Append(new StringValue(Int64ToString(node->id()))); 239 args.Append(new StringValue(Int64ToString(node->id())));
240 240
241 // TODO(erikkay) The only two things that BookmarkModel sends this 241 // TODO(erikkay) The only three things that BookmarkModel sends this
242 // notification for are title and favicon. Since we're currently ignoring 242 // notification for are title, url and favicon. Since we're currently
243 // favicon and since the notification doesn't say which one anyway, for now 243 // ignoring favicon and since the notification doesn't say which one anyway,
244 // we only include title. The ideal thing would be to change BookmarkModel 244 // for now we only include title and url. The ideal thing would be to change
245 // to indicate what changed. 245 // BookmarkModel to indicate what changed.
246 DictionaryValue* object_args = new DictionaryValue(); 246 DictionaryValue* object_args = new DictionaryValue();
247 object_args->SetString(keys::kTitleKey, node->GetTitle()); 247 object_args->SetString(keys::kTitleKey, node->GetTitle());
248 if (node->is_url())
249 object_args->SetString(keys::kUrlKey, node->GetURL().spec());
248 args.Append(object_args); 250 args.Append(object_args);
249 251
250 std::string json_args; 252 std::string json_args;
251 base::JSONWriter::Write(&args, false, &json_args); 253 base::JSONWriter::Write(&args, false, &json_args);
252 DispatchEvent(model->profile(), keys::kOnBookmarkChanged, json_args); 254 DispatchEvent(model->profile(), keys::kOnBookmarkChanged, json_args);
253 } 255 }
254 256
255 void ExtensionBookmarkEventRouter::BookmarkNodeFavIconLoaded( 257 void ExtensionBookmarkEventRouter::BookmarkNodeFavIconLoaded(
256 BookmarkModel* model, const BookmarkNode* node) { 258 BookmarkModel* model, const BookmarkNode* node) {
257 // TODO(erikkay) anything we should do here? 259 // TODO(erikkay) anything we should do here?
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 EXTENSION_FUNCTION_VALIDATE(ExtractIds(args_.get(), &ids, &invalid_id)); 634 EXTENSION_FUNCTION_VALIDATE(ExtractIds(args_.get(), &ids, &invalid_id));
633 if (invalid_id) { 635 if (invalid_id) {
634 error_ = keys::kInvalidIdError; 636 error_ = keys::kInvalidIdError;
635 return false; 637 return false;
636 } 638 }
637 EXTENSION_FUNCTION_VALIDATE(ids.size() == 1); 639 EXTENSION_FUNCTION_VALIDATE(ids.size() == 1);
638 640
639 const ListValue* args = args_as_list(); 641 const ListValue* args = args_as_list();
640 DictionaryValue* updates; 642 DictionaryValue* updates;
641 EXTENSION_FUNCTION_VALIDATE(args->GetDictionary(1, &updates)); 643 EXTENSION_FUNCTION_VALIDATE(args->GetDictionary(1, &updates));
644
642 std::wstring title; 645 std::wstring title;
643 updates->GetString(keys::kTitleKey, &title); // Optional (empty is clear). 646 std::string url_string;
647
648 // Optional but we need to distinguish non present from an empty title.
649 const bool has_title = updates->GetString(keys::kTitleKey, &title);
650 updates->GetString(keys::kUrlKey, &url_string); // Optional.
651
652 GURL url;
653 if (!url_string.empty()) {
654 url = GURL(url_string);
655
656 // If URL is present then it needs to be a non empty valid URL.
657 EXTENSION_FUNCTION_VALIDATE(!url.is_empty());
658 EXTENSION_FUNCTION_VALIDATE(url.is_valid());
659 }
644 660
645 BookmarkModel* model = profile()->GetBookmarkModel(); 661 BookmarkModel* model = profile()->GetBookmarkModel();
646 const BookmarkNode* node = model->GetNodeByID(ids.front()); 662 const BookmarkNode* node = model->GetNodeByID(ids.front());
647 if (!node) { 663 if (!node) {
648 error_ = keys::kNoNodeError; 664 error_ = keys::kNoNodeError;
649 return false; 665 return false;
650 } 666 }
651 if (node == model->root_node() || 667 if (node == model->root_node() ||
652 node == model->other_node() || 668 node == model->other_node() ||
653 node == model->GetBookmarkBarNode()) { 669 node == model->GetBookmarkBarNode()) {
654 error_ = keys::kModifySpecialError; 670 error_ = keys::kModifySpecialError;
655 return false; 671 return false;
656 } 672 }
657 model->SetTitle(node, title); 673 if (has_title)
674 model->SetTitle(node, title);
675 if (!url.is_empty())
676 model->SetURL(node, url);
658 677
659 DictionaryValue* ret = ExtensionBookmarks::GetNodeDictionary(node, false); 678 DictionaryValue* ret = ExtensionBookmarks::GetNodeDictionary(node, false);
660 result_.reset(ret); 679 result_.reset(ret);
661 680
662 return true; 681 return true;
663 } 682 }
664 683
665 // Mapper superclass for BookmarkFunctions. 684 // Mapper superclass for BookmarkFunctions.
666 template <typename BucketIdType> 685 template <typename BucketIdType>
667 class BookmarkBucketMapper : public BucketMapper { 686 class BookmarkBucketMapper : public BucketMapper {
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 850
832 void UpdateBookmarkFunction::GetQuotaLimitHeuristics( 851 void UpdateBookmarkFunction::GetQuotaLimitHeuristics(
833 QuotaLimitHeuristics* heuristics) const { 852 QuotaLimitHeuristics* heuristics) const {
834 BookmarksQuotaLimitFactory::Build<UpdateBookmarkFunction>(heuristics); 853 BookmarksQuotaLimitFactory::Build<UpdateBookmarkFunction>(heuristics);
835 }; 854 };
836 855
837 void CreateBookmarkFunction::GetQuotaLimitHeuristics( 856 void CreateBookmarkFunction::GetQuotaLimitHeuristics(
838 QuotaLimitHeuristics* heuristics) const { 857 QuotaLimitHeuristics* heuristics) const {
839 BookmarksQuotaLimitFactory::BuildForCreate(heuristics, profile()); 858 BookmarksQuotaLimitFactory::BuildForCreate(heuristics, profile());
840 } 859 }
OLDNEW
« no previous file with comments | « no previous file | chrome/common/extensions/api/extension_api.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698