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

Side by Side Diff: chrome/browser/extensions/api/bookmarks/bookmarks_api.cc

Issue 16915006: Convert most of extensions and some other random stuff to using the base namespace for Values. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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
OLDNEW
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/extensions/api/bookmarks/bookmarks_api.h" 5 #include "chrome/browser/extensions/api/bookmarks/bookmarks_api.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_path.h" 8 #include "base/files/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 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 } 141 }
142 142
143 BookmarkEventRouter::~BookmarkEventRouter() { 143 BookmarkEventRouter::~BookmarkEventRouter() {
144 if (model_) { 144 if (model_) {
145 model_->RemoveObserver(this); 145 model_->RemoveObserver(this);
146 } 146 }
147 } 147 }
148 148
149 void BookmarkEventRouter::DispatchEvent( 149 void BookmarkEventRouter::DispatchEvent(
150 const char* event_name, 150 const char* event_name,
151 scoped_ptr<ListValue> event_args) { 151 scoped_ptr<base::ListValue> event_args) {
152 if (extensions::ExtensionSystem::Get(profile_)->event_router()) { 152 if (extensions::ExtensionSystem::Get(profile_)->event_router()) {
153 extensions::ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent( 153 extensions::ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent(
154 make_scoped_ptr(new extensions::Event(event_name, event_args.Pass()))); 154 make_scoped_ptr(new extensions::Event(event_name, event_args.Pass())));
155 } 155 }
156 } 156 }
157 157
158 void BookmarkEventRouter::Loaded(BookmarkModel* model, bool ids_reassigned) { 158 void BookmarkEventRouter::Loaded(BookmarkModel* model, bool ids_reassigned) {
159 // TODO(erikkay): Perhaps we should send this event down to the extension 159 // TODO(erikkay): Perhaps we should send this event down to the extension
160 // so they know when it's safe to use the API? 160 // so they know when it's safe to use the API?
161 } 161 }
162 162
163 void BookmarkEventRouter::BookmarkModelBeingDeleted(BookmarkModel* model) { 163 void BookmarkEventRouter::BookmarkModelBeingDeleted(BookmarkModel* model) {
164 model_ = NULL; 164 model_ = NULL;
165 } 165 }
166 166
167 void BookmarkEventRouter::BookmarkNodeMoved(BookmarkModel* model, 167 void BookmarkEventRouter::BookmarkNodeMoved(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 scoped_ptr<ListValue> args(new ListValue()); 172 scoped_ptr<base::ListValue> args(new base::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 base::StringValue(base::Int64ToString(node->id())));
175 DictionaryValue* object_args = new DictionaryValue(); 175 base::DictionaryValue* object_args = new base::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 DispatchEvent(keys::kOnBookmarkMoved, args.Pass()); 184 DispatchEvent(keys::kOnBookmarkMoved, args.Pass());
185 } 185 }
186 186
187 void BookmarkEventRouter::BookmarkNodeAdded(BookmarkModel* model, 187 void BookmarkEventRouter::BookmarkNodeAdded(BookmarkModel* model,
188 const BookmarkNode* parent, 188 const BookmarkNode* parent,
189 int index) { 189 int index) {
190 scoped_ptr<ListValue> args(new ListValue()); 190 scoped_ptr<base::ListValue> args(new base::ListValue());
191 const BookmarkNode* node = parent->GetChild(index); 191 const BookmarkNode* node = parent->GetChild(index);
192 args->Append(new StringValue(base::Int64ToString(node->id()))); 192 args->Append(new base::StringValue(base::Int64ToString(node->id())));
193 scoped_ptr<BookmarkTreeNode> tree_node( 193 scoped_ptr<BookmarkTreeNode> tree_node(
194 bookmark_api_helpers::GetBookmarkTreeNode(node, false, false)); 194 bookmark_api_helpers::GetBookmarkTreeNode(node, false, false));
195 args->Append(tree_node->ToValue().release()); 195 args->Append(tree_node->ToValue().release());
196 196
197 DispatchEvent(keys::kOnBookmarkCreated, args.Pass()); 197 DispatchEvent(keys::kOnBookmarkCreated, args.Pass());
198 } 198 }
199 199
200 void BookmarkEventRouter::BookmarkNodeRemoved(BookmarkModel* model, 200 void BookmarkEventRouter::BookmarkNodeRemoved(BookmarkModel* model,
201 const BookmarkNode* parent, 201 const BookmarkNode* parent,
202 int index, 202 int index,
203 const BookmarkNode* node) { 203 const BookmarkNode* node) {
204 scoped_ptr<ListValue> args(new ListValue()); 204 scoped_ptr<base::ListValue> args(new base::ListValue());
205 args->Append(new StringValue(base::Int64ToString(node->id()))); 205 args->Append(new base::StringValue(base::Int64ToString(node->id())));
206 DictionaryValue* object_args = new DictionaryValue(); 206 base::DictionaryValue* object_args = new base::DictionaryValue();
207 object_args->SetString(keys::kParentIdKey, 207 object_args->SetString(keys::kParentIdKey,
208 base::Int64ToString(parent->id())); 208 base::Int64ToString(parent->id()));
209 object_args->SetInteger(keys::kIndexKey, index); 209 object_args->SetInteger(keys::kIndexKey, index);
210 args->Append(object_args); 210 args->Append(object_args);
211 211
212 DispatchEvent(keys::kOnBookmarkRemoved, args.Pass()); 212 DispatchEvent(keys::kOnBookmarkRemoved, args.Pass());
213 } 213 }
214 214
215 void BookmarkEventRouter::BookmarkAllNodesRemoved(BookmarkModel* model) { 215 void BookmarkEventRouter::BookmarkAllNodesRemoved(BookmarkModel* model) {
216 NOTREACHED(); 216 NOTREACHED();
217 // TODO(shashishekhar) Currently this notification is only used on Android, 217 // TODO(shashishekhar) Currently this notification is only used on Android,
218 // which does not support extensions. If Desktop needs to support this, add 218 // which does not support extensions. If Desktop needs to support this, add
219 // a new event to the extensions api. 219 // a new event to the extensions api.
220 } 220 }
221 221
222 void BookmarkEventRouter::BookmarkNodeChanged(BookmarkModel* model, 222 void BookmarkEventRouter::BookmarkNodeChanged(BookmarkModel* model,
223 const BookmarkNode* node) { 223 const BookmarkNode* node) {
224 scoped_ptr<ListValue> args(new ListValue()); 224 scoped_ptr<base::ListValue> args(new base::ListValue());
225 args->Append(new StringValue(base::Int64ToString(node->id()))); 225 args->Append(new base::StringValue(base::Int64ToString(node->id())));
226 226
227 // TODO(erikkay) The only three things that BookmarkModel sends this 227 // TODO(erikkay) The only three things that BookmarkModel sends this
228 // notification for are title, url and favicon. Since we're currently 228 // notification for are title, url and favicon. Since we're currently
229 // ignoring favicon and since the notification doesn't say which one anyway, 229 // 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 230 // for now we only include title and url. The ideal thing would be to change
231 // BookmarkModel to indicate what changed. 231 // BookmarkModel to indicate what changed.
232 DictionaryValue* object_args = new DictionaryValue(); 232 base::DictionaryValue* object_args = new base::DictionaryValue();
233 object_args->SetString(keys::kTitleKey, node->GetTitle()); 233 object_args->SetString(keys::kTitleKey, node->GetTitle());
234 if (node->is_url()) 234 if (node->is_url())
235 object_args->SetString(keys::kUrlKey, node->url().spec()); 235 object_args->SetString(keys::kUrlKey, node->url().spec());
236 args->Append(object_args); 236 args->Append(object_args);
237 237
238 DispatchEvent(keys::kOnBookmarkChanged, args.Pass()); 238 DispatchEvent(keys::kOnBookmarkChanged, args.Pass());
239 } 239 }
240 240
241 void BookmarkEventRouter::BookmarkNodeFaviconChanged(BookmarkModel* model, 241 void BookmarkEventRouter::BookmarkNodeFaviconChanged(BookmarkModel* model,
242 const BookmarkNode* node) { 242 const BookmarkNode* node) {
243 // TODO(erikkay) anything we should do here? 243 // TODO(erikkay) anything we should do here?
244 } 244 }
245 245
246 void BookmarkEventRouter::BookmarkNodeChildrenReordered( 246 void BookmarkEventRouter::BookmarkNodeChildrenReordered(
247 BookmarkModel* model, 247 BookmarkModel* model,
248 const BookmarkNode* node) { 248 const BookmarkNode* node) {
249 scoped_ptr<ListValue> args(new ListValue()); 249 scoped_ptr<base::ListValue> args(new base::ListValue());
250 args->Append(new StringValue(base::Int64ToString(node->id()))); 250 args->Append(new base::StringValue(base::Int64ToString(node->id())));
251 int childCount = node->child_count(); 251 int childCount = node->child_count();
252 ListValue* children = new ListValue(); 252 base::ListValue* children = new base::ListValue();
253 for (int i = 0; i < childCount; ++i) { 253 for (int i = 0; i < childCount; ++i) {
254 const BookmarkNode* child = node->GetChild(i); 254 const BookmarkNode* child = node->GetChild(i);
255 Value* child_id = new StringValue(base::Int64ToString(child->id())); 255 base::Value* child_id =
256 new base::StringValue(base::Int64ToString(child->id()));
256 children->Append(child_id); 257 children->Append(child_id);
257 } 258 }
258 DictionaryValue* reorder_info = new DictionaryValue(); 259 base::DictionaryValue* reorder_info = new base::DictionaryValue();
259 reorder_info->Set(keys::kChildIdsKey, children); 260 reorder_info->Set(keys::kChildIdsKey, children);
260 args->Append(reorder_info); 261 args->Append(reorder_info);
261 262
262 DispatchEvent(keys::kOnBookmarkChildrenReordered, args.Pass()); 263 DispatchEvent(keys::kOnBookmarkChildrenReordered, args.Pass());
263 } 264 }
264 265
265 void BookmarkEventRouter::ExtensiveBookmarkChangesBeginning( 266 void BookmarkEventRouter::ExtensiveBookmarkChangesBeginning(
266 BookmarkModel* model) { 267 BookmarkModel* model) {
267 scoped_ptr<ListValue> args(new ListValue()); 268 scoped_ptr<base::ListValue> args(new base::ListValue());
268 DispatchEvent(keys::kOnBookmarkImportBegan, args.Pass()); 269 DispatchEvent(keys::kOnBookmarkImportBegan, args.Pass());
269 } 270 }
270 271
271 void BookmarkEventRouter::ExtensiveBookmarkChangesEnded(BookmarkModel* model) { 272 void BookmarkEventRouter::ExtensiveBookmarkChangesEnded(BookmarkModel* model) {
272 scoped_ptr<ListValue> args(new ListValue()); 273 scoped_ptr<base::ListValue> args(new base::ListValue());
273 DispatchEvent(keys::kOnBookmarkImportEnded, args.Pass()); 274 DispatchEvent(keys::kOnBookmarkImportEnded, args.Pass());
274 } 275 }
275 276
276 BookmarksAPI::BookmarksAPI(Profile* profile) : profile_(profile) { 277 BookmarksAPI::BookmarksAPI(Profile* profile) : profile_(profile) {
277 ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( 278 ExtensionSystem::Get(profile_)->event_router()->RegisterObserver(
278 this, keys::kOnBookmarkCreated); 279 this, keys::kOnBookmarkCreated);
279 ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( 280 ExtensionSystem::Get(profile_)->event_router()->RegisterObserver(
280 this, keys::kOnBookmarkRemoved); 281 this, keys::kOnBookmarkRemoved);
281 ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( 282 ExtensionSystem::Get(profile_)->event_router()->RegisterObserver(
282 this, keys::kOnBookmarkChanged); 283 this, keys::kOnBookmarkChanged);
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 for (std::vector<const BookmarkNode*>::iterator node_iter = nodes.begin(); 451 for (std::vector<const BookmarkNode*>::iterator node_iter = nodes.begin();
451 node_iter != nodes.end(); ++node_iter) { 452 node_iter != nodes.end(); ++node_iter) {
452 bookmark_api_helpers::AddNode(*node_iter, &tree_nodes, false); 453 bookmark_api_helpers::AddNode(*node_iter, &tree_nodes, false);
453 } 454 }
454 455
455 results_ = bookmarks::Search::Results::Create(tree_nodes); 456 results_ = bookmarks::Search::Results::Create(tree_nodes);
456 return true; 457 return true;
457 } 458 }
458 459
459 // static 460 // static
460 bool BookmarksRemoveFunction::ExtractIds(const ListValue* args, 461 bool BookmarksRemoveFunction::ExtractIds(const base::ListValue* args,
461 std::list<int64>* ids, 462 std::list<int64>* ids,
462 bool* invalid_id) { 463 bool* invalid_id) {
463 std::string id_string; 464 std::string id_string;
464 if (!args->GetString(0, &id_string)) 465 if (!args->GetString(0, &id_string))
465 return false; 466 return false;
466 int64 id; 467 int64 id;
467 if (base::StringToInt64(id_string, &id)) 468 if (base::StringToInt64(id_string, &id))
468 ids->push_back(id); 469 ids->push_back(id);
469 else 470 else
470 *invalid_id = true; 471 *invalid_id = true;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 } 562 }
562 563
563 scoped_ptr<BookmarkTreeNode> ret( 564 scoped_ptr<BookmarkTreeNode> ret(
564 bookmark_api_helpers::GetBookmarkTreeNode(node, false, false)); 565 bookmark_api_helpers::GetBookmarkTreeNode(node, false, false));
565 results_ = bookmarks::Create::Results::Create(*ret); 566 results_ = bookmarks::Create::Results::Create(*ret);
566 567
567 return true; 568 return true;
568 } 569 }
569 570
570 // static 571 // static
571 bool BookmarksMoveFunction::ExtractIds(const ListValue* args, 572 bool BookmarksMoveFunction::ExtractIds(const base::ListValue* args,
572 std::list<int64>* ids, 573 std::list<int64>* ids,
573 bool* invalid_id) { 574 bool* invalid_id) {
574 // For now, Move accepts ID parameters in the same way as an Update. 575 // For now, Move accepts ID parameters in the same way as an Update.
575 return BookmarksUpdateFunction::ExtractIds(args, ids, invalid_id); 576 return BookmarksUpdateFunction::ExtractIds(args, ids, invalid_id);
576 } 577 }
577 578
578 bool BookmarksMoveFunction::RunImpl() { 579 bool BookmarksMoveFunction::RunImpl() {
579 if (!EditBookmarksEnabled()) 580 if (!EditBookmarksEnabled())
580 return false; 581 return false;
581 582
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 model->Move(node, parent, index); 636 model->Move(node, parent, index);
636 637
637 scoped_ptr<BookmarkTreeNode> tree_node( 638 scoped_ptr<BookmarkTreeNode> tree_node(
638 bookmark_api_helpers::GetBookmarkTreeNode(node, false, false)); 639 bookmark_api_helpers::GetBookmarkTreeNode(node, false, false));
639 results_ = bookmarks::Move::Results::Create(*tree_node); 640 results_ = bookmarks::Move::Results::Create(*tree_node);
640 641
641 return true; 642 return true;
642 } 643 }
643 644
644 // static 645 // static
645 bool BookmarksUpdateFunction::ExtractIds(const ListValue* args, 646 bool BookmarksUpdateFunction::ExtractIds(const base::ListValue* args,
646 std::list<int64>* ids, 647 std::list<int64>* ids,
647 bool* invalid_id) { 648 bool* invalid_id) {
648 // For now, Update accepts ID parameters in the same way as an Remove. 649 // For now, Update accepts ID parameters in the same way as an Remove.
649 return BookmarksRemoveFunction::ExtractIds(args, ids, invalid_id); 650 return BookmarksRemoveFunction::ExtractIds(args, ids, invalid_id);
650 } 651 }
651 652
652 bool BookmarksUpdateFunction::RunImpl() { 653 bool BookmarksUpdateFunction::RunImpl() {
653 if (!EditBookmarksEnabled()) 654 if (!EditBookmarksEnabled())
654 return false; 655 return false;
655 656
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 std::map<BucketIdType, Bucket*> buckets_; 722 std::map<BucketIdType, Bucket*> buckets_;
722 }; 723 };
723 724
724 // Mapper for 'bookmarks.create'. Maps "same input to bookmarks.create" to a 725 // Mapper for 'bookmarks.create'. Maps "same input to bookmarks.create" to a
725 // unique bucket. 726 // unique bucket.
726 class CreateBookmarkBucketMapper : public BookmarkBucketMapper<std::string> { 727 class CreateBookmarkBucketMapper : public BookmarkBucketMapper<std::string> {
727 public: 728 public:
728 explicit CreateBookmarkBucketMapper(Profile* profile) : profile_(profile) {} 729 explicit CreateBookmarkBucketMapper(Profile* profile) : profile_(profile) {}
729 // TODO(tim): This should share code with BookmarksCreateFunction::RunImpl, 730 // TODO(tim): This should share code with BookmarksCreateFunction::RunImpl,
730 // but I can't figure out a good way to do that with all the macros. 731 // but I can't figure out a good way to do that with all the macros.
731 virtual void GetBucketsForArgs(const ListValue* args, 732 virtual void GetBucketsForArgs(const base::ListValue* args,
732 BucketList* buckets) OVERRIDE { 733 BucketList* buckets) OVERRIDE {
733 const DictionaryValue* json; 734 const base::DictionaryValue* json;
734 if (!args->GetDictionary(0, &json)) 735 if (!args->GetDictionary(0, &json))
735 return; 736 return;
736 737
737 std::string parent_id; 738 std::string parent_id;
738 if (json->HasKey(keys::kParentIdKey)) { 739 if (json->HasKey(keys::kParentIdKey)) {
739 if (!json->GetString(keys::kParentIdKey, &parent_id)) 740 if (!json->GetString(keys::kParentIdKey, &parent_id))
740 return; 741 return;
741 } 742 }
742 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_); 743 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_);
743 744
(...skipping 16 matching lines...) Expand all
760 buckets->push_back(GetBucket(base::SHA1HashString(bucket_id))); 761 buckets->push_back(GetBucket(base::SHA1HashString(bucket_id)));
761 } 762 }
762 private: 763 private:
763 Profile* profile_; 764 Profile* profile_;
764 }; 765 };
765 766
766 // Mapper for 'bookmarks.remove'. 767 // Mapper for 'bookmarks.remove'.
767 class RemoveBookmarksBucketMapper : public BookmarkBucketMapper<std::string> { 768 class RemoveBookmarksBucketMapper : public BookmarkBucketMapper<std::string> {
768 public: 769 public:
769 explicit RemoveBookmarksBucketMapper(Profile* profile) : profile_(profile) {} 770 explicit RemoveBookmarksBucketMapper(Profile* profile) : profile_(profile) {}
770 virtual void GetBucketsForArgs(const ListValue* args, 771 virtual void GetBucketsForArgs(const base::ListValue* args,
771 BucketList* buckets) OVERRIDE { 772 BucketList* buckets) OVERRIDE {
772 typedef std::list<int64> IdList; 773 typedef std::list<int64> IdList;
773 IdList ids; 774 IdList ids;
774 bool invalid_id = false; 775 bool invalid_id = false;
775 if (!BookmarksRemoveFunction::ExtractIds(args, &ids, &invalid_id) || 776 if (!BookmarksRemoveFunction::ExtractIds(args, &ids, &invalid_id) ||
776 invalid_id) { 777 invalid_id) {
777 return; 778 return;
778 } 779 }
779 780
780 for (IdList::iterator it = ids.begin(); it != ids.end(); ++it) { 781 for (IdList::iterator it = ids.begin(); it != ids.end(); ++it) {
(...skipping 14 matching lines...) Expand all
795 }; 796 };
796 797
797 // Mapper for any bookmark function accepting bookmark IDs as parameters, where 798 // Mapper for any bookmark function accepting bookmark IDs as parameters, where
798 // a distinct ID corresponds to a single item in terms of quota limiting. This 799 // a distinct ID corresponds to a single item in terms of quota limiting. This
799 // is inappropriate for bookmarks.remove, for example, since repeated removals 800 // is inappropriate for bookmarks.remove, for example, since repeated removals
800 // of the same item will actually have a different ID each time. 801 // of the same item will actually have a different ID each time.
801 template <class FunctionType> 802 template <class FunctionType>
802 class BookmarkIdMapper : public BookmarkBucketMapper<int64> { 803 class BookmarkIdMapper : public BookmarkBucketMapper<int64> {
803 public: 804 public:
804 typedef std::list<int64> IdList; 805 typedef std::list<int64> IdList;
805 virtual void GetBucketsForArgs(const ListValue* args, BucketList* buckets) { 806 virtual void GetBucketsForArgs(const base::ListValue* args,
807 BucketList* buckets) {
806 IdList ids; 808 IdList ids;
807 bool invalid_id = false; 809 bool invalid_id = false;
808 if (!FunctionType::ExtractIds(args, &ids, &invalid_id) || invalid_id) 810 if (!FunctionType::ExtractIds(args, &ids, &invalid_id) || invalid_id)
809 return; 811 return;
810 for (IdList::iterator it = ids.begin(); it != ids.end(); ++it) 812 for (IdList::iterator it = ids.begin(); it != ids.end(); ++it)
811 buckets->push_back(GetBucket(*it)); 813 buckets->push_back(GetBucket(*it));
812 } 814 }
813 }; 815 };
814 816
815 // Builds heuristics for all BookmarkFunctions using specialized BucketMappers. 817 // Builds heuristics for all BookmarkFunctions using specialized BucketMappers.
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 #if !defined(OS_ANDROID) 1005 #if !defined(OS_ANDROID)
1004 // Android does not have support for the standard exporter. 1006 // Android does not have support for the standard exporter.
1005 // TODO(jgreenwald): remove ifdef once extensions are no longer built on 1007 // TODO(jgreenwald): remove ifdef once extensions are no longer built on
1006 // Android. 1008 // Android.
1007 bookmark_html_writer::WriteBookmarks(profile(), path, NULL); 1009 bookmark_html_writer::WriteBookmarks(profile(), path, NULL);
1008 #endif 1010 #endif
1009 Release(); // Balanced in BookmarksIOFunction::SelectFile() 1011 Release(); // Balanced in BookmarksIOFunction::SelectFile()
1010 } 1012 }
1011 1013
1012 } // namespace extensions 1014 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698