Index: chrome/browser/extensions/api/bookmarks/bookmarks_api.cc |
diff --git a/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc b/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc |
index b4022e607ddcae228829a718529a9fae8b003084..885e104b48c626f6e8593622e9ab849e66d474f6 100644 |
--- a/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc |
+++ b/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc |
@@ -10,7 +10,6 @@ |
#include "base/files/file_path.h" |
#include "base/i18n/file_util_icu.h" |
#include "base/i18n/time_formatting.h" |
-#include "base/json/json_writer.h" |
#include "base/lazy_instance.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/path_service.h" |
@@ -49,7 +48,6 @@ |
#include "extensions/browser/event_router.h" |
#include "extensions/browser/extension_function_dispatcher.h" |
#include "extensions/browser/extension_registry.h" |
-#include "extensions/browser/quota_service.h" |
#include "extensions/common/permissions/permissions_data.h" |
#include "grit/generated_resources.h" |
#include "ui/base/l10n/l10n_util.h" |
@@ -63,20 +61,12 @@ namespace extensions { |
namespace keys = bookmark_api_constants; |
namespace bookmarks = api::bookmarks; |
-using base::TimeDelta; |
using bookmarks::BookmarkTreeNode; |
using bookmarks::CreateDetails; |
using content::BrowserContext; |
using content::BrowserThread; |
using content::WebContents; |
-typedef QuotaLimitHeuristic::Bucket Bucket; |
-typedef QuotaLimitHeuristic::Config Config; |
-typedef QuotaLimitHeuristic::BucketList BucketList; |
-typedef QuotaService::TimedLimit TimedLimit; |
-typedef QuotaService::SustainedLimit SustainedLimit; |
-typedef QuotaLimitHeuristic::BucketMapper BucketMapper; |
- |
namespace { |
// Generates a default path (including a default filename) that will be |
@@ -804,198 +794,6 @@ bool BookmarksUpdateFunction::RunOnReady() { |
return true; |
} |
-// Mapper superclass for BookmarkFunctions. |
-template <typename BucketIdType> |
-class BookmarkBucketMapper : public BucketMapper { |
- public: |
- virtual ~BookmarkBucketMapper() { STLDeleteValues(&buckets_); } |
- protected: |
- Bucket* GetBucket(const BucketIdType& id) { |
- Bucket* b = buckets_[id]; |
- if (b == NULL) { |
- b = new Bucket(); |
- buckets_[id] = b; |
- } |
- return b; |
- } |
- private: |
- std::map<BucketIdType, Bucket*> buckets_; |
-}; |
- |
-// Mapper for 'bookmarks.create'. Maps "same input to bookmarks.create" to a |
-// unique bucket. |
-class CreateBookmarkBucketMapper : public BookmarkBucketMapper<std::string> { |
- public: |
- explicit CreateBookmarkBucketMapper(BrowserContext* context) |
- : browser_context_(context) {} |
- // TODO(tim): This should share code with BookmarksCreateFunction::RunOnReady, |
- // but I can't figure out a good way to do that with all the macros. |
- virtual void GetBucketsForArgs(const base::ListValue* args, |
- BucketList* buckets) OVERRIDE { |
- const base::DictionaryValue* json; |
- if (!args->GetDictionary(0, &json)) |
- return; |
- |
- std::string parent_id; |
- if (json->HasKey(keys::kParentIdKey)) { |
- if (!json->GetString(keys::kParentIdKey, &parent_id)) |
- return; |
- } |
- BookmarkModel* model = BookmarkModelFactory::GetForProfile( |
- Profile::FromBrowserContext(browser_context_)); |
- |
- int64 parent_id_int64; |
- base::StringToInt64(parent_id, &parent_id_int64); |
- const BookmarkNode* parent = |
- ::bookmarks::GetBookmarkNodeByID(model, parent_id_int64); |
- if (!parent) |
- return; |
- |
- std::string bucket_id = base::UTF16ToUTF8(parent->GetTitle()); |
- std::string title; |
- json->GetString(keys::kTitleKey, &title); |
- std::string url_string; |
- json->GetString(keys::kUrlKey, &url_string); |
- |
- bucket_id += title; |
- bucket_id += url_string; |
- // 20 bytes (SHA1 hash length) is very likely less than most of the |
- // |bucket_id| strings we construct here, so we hash it to save space. |
- buckets->push_back(GetBucket(base::SHA1HashString(bucket_id))); |
- } |
- |
- private: |
- BrowserContext* browser_context_; |
-}; |
- |
-// Mapper for 'bookmarks.remove'. |
-class RemoveBookmarksBucketMapper : public BookmarkBucketMapper<std::string> { |
- public: |
- explicit RemoveBookmarksBucketMapper(BrowserContext* context) |
- : browser_context_(context) {} |
- virtual void GetBucketsForArgs(const base::ListValue* args, |
- BucketList* buckets) OVERRIDE { |
- typedef std::list<int64> IdList; |
- IdList ids; |
- bool invalid_id = false; |
- if (!BookmarksRemoveFunction::ExtractIds(args, &ids, &invalid_id) || |
- invalid_id) { |
- return; |
- } |
- |
- for (IdList::iterator it = ids.begin(); it != ids.end(); ++it) { |
- BookmarkModel* model = BookmarkModelFactory::GetForProfile( |
- Profile::FromBrowserContext(browser_context_)); |
- const BookmarkNode* node = ::bookmarks::GetBookmarkNodeByID(model, *it); |
- if (!node || node->is_root()) |
- return; |
- |
- std::string bucket_id; |
- bucket_id += base::UTF16ToUTF8(node->parent()->GetTitle()); |
- bucket_id += base::UTF16ToUTF8(node->GetTitle()); |
- bucket_id += node->url().spec(); |
- buckets->push_back(GetBucket(base::SHA1HashString(bucket_id))); |
- } |
- } |
- |
- private: |
- BrowserContext* browser_context_; |
-}; |
- |
-// Mapper for any bookmark function accepting bookmark IDs as parameters, where |
-// a distinct ID corresponds to a single item in terms of quota limiting. This |
-// is inappropriate for bookmarks.remove, for example, since repeated removals |
-// of the same item will actually have a different ID each time. |
-template <class FunctionType> |
-class BookmarkIdMapper : public BookmarkBucketMapper<int64> { |
- public: |
- typedef std::list<int64> IdList; |
- virtual void GetBucketsForArgs(const base::ListValue* args, |
- BucketList* buckets) { |
- IdList ids; |
- bool invalid_id = false; |
- if (!FunctionType::ExtractIds(args, &ids, &invalid_id) || invalid_id) |
- return; |
- for (IdList::iterator it = ids.begin(); it != ids.end(); ++it) |
- buckets->push_back(GetBucket(*it)); |
- } |
-}; |
- |
-// Builds heuristics for all BookmarkFunctions using specialized BucketMappers. |
-class BookmarksQuotaLimitFactory { |
- public: |
- // For id-based bookmark functions. |
- template <class FunctionType> |
- static void Build(QuotaLimitHeuristics* heuristics) { |
- BuildWithMappers(heuristics, new BookmarkIdMapper<FunctionType>(), |
- new BookmarkIdMapper<FunctionType>()); |
- } |
- |
- // For bookmarks.create. |
- static void BuildForCreate(QuotaLimitHeuristics* heuristics, |
- BrowserContext* context) { |
- BuildWithMappers(heuristics, |
- new CreateBookmarkBucketMapper(context), |
- new CreateBookmarkBucketMapper(context)); |
- } |
- |
- // For bookmarks.remove. |
- static void BuildForRemove(QuotaLimitHeuristics* heuristics, |
- BrowserContext* context) { |
- BuildWithMappers(heuristics, |
- new RemoveBookmarksBucketMapper(context), |
- new RemoveBookmarksBucketMapper(context)); |
- } |
- |
- private: |
- static void BuildWithMappers(QuotaLimitHeuristics* heuristics, |
- BucketMapper* short_mapper, BucketMapper* long_mapper) { |
- const Config kSustainedLimitConfig = { |
- // See bookmarks.json for current value. |
- bookmarks::MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE, |
- TimeDelta::FromMinutes(1) |
- }; |
- heuristics->push_back(new SustainedLimit( |
- TimeDelta::FromMinutes(10), |
- kSustainedLimitConfig, |
- short_mapper, |
- "MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE")); |
- |
- const Config kTimedLimitConfig = { |
- // See bookmarks.json for current value. |
- bookmarks::MAX_WRITE_OPERATIONS_PER_HOUR, |
- TimeDelta::FromHours(1) |
- }; |
- heuristics->push_back(new TimedLimit( |
- kTimedLimitConfig, |
- long_mapper, |
- "MAX_WRITE_OPERATIONS_PER_HOUR")); |
- } |
- |
- DISALLOW_IMPLICIT_CONSTRUCTORS(BookmarksQuotaLimitFactory); |
-}; |
- |
-// And finally, building the individual heuristics for each function. |
-void BookmarksRemoveFunction::GetQuotaLimitHeuristics( |
- QuotaLimitHeuristics* heuristics) const { |
- BookmarksQuotaLimitFactory::BuildForRemove(heuristics, GetProfile()); |
-} |
- |
-void BookmarksMoveFunction::GetQuotaLimitHeuristics( |
- QuotaLimitHeuristics* heuristics) const { |
- BookmarksQuotaLimitFactory::Build<BookmarksMoveFunction>(heuristics); |
-} |
- |
-void BookmarksUpdateFunction::GetQuotaLimitHeuristics( |
- QuotaLimitHeuristics* heuristics) const { |
- BookmarksQuotaLimitFactory::Build<BookmarksUpdateFunction>(heuristics); |
-} |
- |
-void BookmarksCreateFunction::GetQuotaLimitHeuristics( |
- QuotaLimitHeuristics* heuristics) const { |
- BookmarksQuotaLimitFactory::BuildForCreate(heuristics, GetProfile()); |
-} |
- |
BookmarksIOFunction::BookmarksIOFunction() {} |
BookmarksIOFunction::~BookmarksIOFunction() { |