diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-11-20 15:06:40 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-11-22 11:48:58 +0000 |
commit | daa093eea7c773db06799a13bd7e4e2e2a9f8f14 (patch) | |
tree | 96cc5e7b9194c1b29eab927730bfa419e7111c25 /chromium/content/browser/service_worker/service_worker_database.cc | |
parent | be59a35641616a4cf23c4a13fa0632624b021c1b (diff) | |
download | qtwebengine-chromium-daa093eea7c773db06799a13bd7e4e2e2a9f8f14.tar.gz |
BASELINE: Update Chromium to 63.0.3239.58
Change-Id: Ia93b322a00ba4dd4004f3bcf1254063ba90e1605
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/content/browser/service_worker/service_worker_database.cc')
-rw-r--r-- | chromium/content/browser/service_worker/service_worker_database.cc | 100 |
1 files changed, 75 insertions, 25 deletions
diff --git a/chromium/content/browser/service_worker/service_worker_database.cc b/chromium/content/browser/service_worker/service_worker_database.cc index 608186f6029..6ae138490b6 100644 --- a/chromium/content/browser/service_worker/service_worker_database.cc +++ b/chromium/content/browser/service_worker/service_worker_database.cc @@ -19,10 +19,10 @@ #include "content/browser/service_worker/service_worker_database.pb.h" #include "content/browser/service_worker/service_worker_metrics.h" #include "content/common/service_worker/service_worker_utils.h" +#include "third_party/WebKit/public/platform/modules/serviceworker/service_worker_registration.mojom.h" #include "third_party/leveldatabase/env_chromium.h" -#include "third_party/leveldatabase/src/helpers/memenv/memenv.h" +#include "third_party/leveldatabase/leveldb_chrome.h" #include "third_party/leveldatabase/src/include/leveldb/db.h" -#include "third_party/leveldatabase/src/include/leveldb/env.h" #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" #include "url/origin.h" @@ -275,12 +275,11 @@ const char* ServiceWorkerDatabase::StatusToString( } ServiceWorkerDatabase::RegistrationData::RegistrationData() - : registration_id(kInvalidServiceWorkerRegistrationId), + : registration_id(blink::mojom::kInvalidServiceWorkerRegistrationId), version_id(kInvalidServiceWorkerVersionId), is_active(false), has_fetch_handler(false), - resources_total_size_bytes(0) { -} + resources_total_size_bytes(0) {} ServiceWorkerDatabase::RegistrationData::RegistrationData( const RegistrationData& other) = default; @@ -854,7 +853,7 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadUserData( const std::vector<std::string>& user_data_names, std::vector<std::string>* user_data_values) { DCHECK(sequence_checker_.CalledOnValidSequence()); - DCHECK_NE(kInvalidServiceWorkerRegistrationId, registration_id); + DCHECK_NE(blink::mojom::kInvalidServiceWorkerRegistrationId, registration_id); DCHECK(!user_data_names.empty()); DCHECK(user_data_values); @@ -882,10 +881,10 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadUserData( ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadUserDataByKeyPrefix( int64_t registration_id, - const std::string key_prefix, + const std::string& user_data_name_prefix, std::vector<std::string>* user_data_values) { DCHECK(sequence_checker_.CalledOnValidSequence()); - DCHECK_NE(kInvalidServiceWorkerRegistrationId, registration_id); + DCHECK_NE(blink::mojom::kInvalidServiceWorkerRegistrationId, registration_id); DCHECK(user_data_values); Status status = LazyOpen(false); @@ -894,7 +893,8 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadUserDataByKeyPrefix( if (status != STATUS_OK) return status; - std::string prefix = CreateUserDataKey(registration_id, key_prefix); + std::string prefix = + CreateUserDataKey(registration_id, user_data_name_prefix); { std::unique_ptr<leveldb::Iterator> itr( db_->NewIterator(leveldb::ReadOptions())); @@ -929,7 +929,7 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::WriteUserData( const GURL& origin, const std::vector<std::pair<std::string, std::string>>& name_value_pairs) { DCHECK(sequence_checker_.CalledOnValidSequence()); - DCHECK_NE(kInvalidServiceWorkerRegistrationId, registration_id); + DCHECK_NE(blink::mojom::kInvalidServiceWorkerRegistrationId, registration_id); DCHECK(!name_value_pairs.empty()); Status status = LazyOpen(false); @@ -957,7 +957,7 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::DeleteUserData( int64_t registration_id, const std::vector<std::string>& user_data_names) { DCHECK(sequence_checker_.CalledOnValidSequence()); - DCHECK_NE(kInvalidServiceWorkerRegistrationId, registration_id); + DCHECK_NE(blink::mojom::kInvalidServiceWorkerRegistrationId, registration_id); DCHECK(!user_data_names.empty()); Status status = LazyOpen(false); @@ -976,6 +976,60 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::DeleteUserData( } ServiceWorkerDatabase::Status +ServiceWorkerDatabase::DeleteUserDataByKeyPrefixes( + int64_t registration_id, + const std::vector<std::string>& user_data_name_prefixes) { + // Example |user_data_name_prefixes| is {"abc", "xyz"}. + DCHECK(sequence_checker_.CalledOnValidSequence()); + DCHECK_NE(blink::mojom::kInvalidServiceWorkerRegistrationId, registration_id); + + Status status = LazyOpen(false); + if (IsNewOrNonexistentDatabase(status)) + return STATUS_OK; + if (status != STATUS_OK) + return status; + + // Example |key_prefix_without_user_data_name_prefix| is + // "REG_USER_DATA:123456\x00". + std::string key_prefix_without_user_data_name_prefix = + CreateUserDataKeyPrefix(registration_id); + + leveldb::WriteBatch batch; + + for (const std::string& user_data_name_prefix : user_data_name_prefixes) { + // Example |key_prefix| is "REG_USER_DATA:123456\x00abc". + std::string key_prefix = + CreateUserDataKey(registration_id, user_data_name_prefix); + std::unique_ptr<leveldb::Iterator> itr( + db_->NewIterator(leveldb::ReadOptions())); + for (itr->Seek(key_prefix); itr->Valid(); itr->Next()) { + status = LevelDBStatusToStatus(itr->status()); + if (status != STATUS_OK) + return status; + + // Example |itr->key()| is "REG_USER_DATA:123456\x00abcdef". + if (!itr->key().starts_with(key_prefix)) { + // |itr| reached the end of the range of keys prefixed by |key_prefix|. + break; + } + + // Example |user_data_name| is "abcdef". + std::string user_data_name; + bool did_remove_prefix = RemovePrefix( + itr->key().ToString(), key_prefix_without_user_data_name_prefix, + &user_data_name); + DCHECK(did_remove_prefix) << "starts_with already matched longer prefix"; + + batch.Delete(itr->key()); + // Example |CreateHasUserDataKey| is "REG_HAS_USER_DATA:abcdef\x00123456". + batch.Delete(CreateHasUserDataKey(registration_id, user_data_name)); + } + } + + return WriteBatch(&batch); +} + +ServiceWorkerDatabase::Status ServiceWorkerDatabase::ReadUserDataForAllRegistrations( const std::string& user_data_name, std::vector<std::pair<int64_t, std::string>>* user_data) { @@ -1223,7 +1277,7 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::LazyOpen( leveldb_env::Options options; options.create_if_missing = create_if_missing; if (IsDatabaseInMemory()) { - env_.reset(leveldb::NewMemEnv(leveldb::Env::Default())); + env_.reset(leveldb_chrome::NewMemEnv(leveldb::Env::Default())); options.env = env_.get(); } else { options.env = g_service_worker_env.Pointer(); @@ -1379,7 +1433,7 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::ParseRegistrationData( } if (data.has_origin_trial_tokens()) { const ServiceWorkerOriginTrialInfo& info = data.origin_trial_tokens(); - TrialTokenValidator::FeatureToTokensMap origin_trial_tokens; + blink::TrialTokenValidator::FeatureToTokensMap origin_trial_tokens; for (int i = 0; i < info.features_size(); ++i) { const auto& feature = info.features(i); for (int j = 0; j < feature.tokens_size(); ++j) @@ -1790,9 +1844,8 @@ bool ServiceWorkerDatabase::IsOpen() { return db_ != NULL; } -void ServiceWorkerDatabase::Disable( - const tracked_objects::Location& from_here, - Status status) { +void ServiceWorkerDatabase::Disable(const base::Location& from_here, + Status status) { if (status != STATUS_OK) { DLOG(ERROR) << "Failed at: " << from_here.ToString() << " with error: " << StatusToString(status); @@ -1802,25 +1855,22 @@ void ServiceWorkerDatabase::Disable( db_.reset(); } -void ServiceWorkerDatabase::HandleOpenResult( - const tracked_objects::Location& from_here, - Status status) { +void ServiceWorkerDatabase::HandleOpenResult(const base::Location& from_here, + Status status) { if (status != STATUS_OK) Disable(from_here, status); ServiceWorkerMetrics::CountOpenDatabaseResult(status); } -void ServiceWorkerDatabase::HandleReadResult( - const tracked_objects::Location& from_here, - Status status) { +void ServiceWorkerDatabase::HandleReadResult(const base::Location& from_here, + Status status) { if (status != STATUS_OK) Disable(from_here, status); ServiceWorkerMetrics::CountReadDatabaseResult(status); } -void ServiceWorkerDatabase::HandleWriteResult( - const tracked_objects::Location& from_here, - Status status) { +void ServiceWorkerDatabase::HandleWriteResult(const base::Location& from_here, + Status status) { if (status != STATUS_OK) Disable(from_here, status); ServiceWorkerMetrics::CountWriteDatabaseResult(status); |