summaryrefslogtreecommitdiff
path: root/chromium/content/browser/service_worker/service_worker_database.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-11-20 15:06:40 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-11-22 11:48:58 +0000
commitdaa093eea7c773db06799a13bd7e4e2e2a9f8f14 (patch)
tree96cc5e7b9194c1b29eab927730bfa419e7111c25 /chromium/content/browser/service_worker/service_worker_database.cc
parentbe59a35641616a4cf23c4a13fa0632624b021c1b (diff)
downloadqtwebengine-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.cc100
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);