Commit 9e5ee279 authored by Patrick Monette's avatar Patrick Monette Committed by Commit Bot

ServiceWorkerContextWrapper - Use check_empty for the observer list

Change-Id: I659733df1bf3ff9f05ea978df804ecca5039b713
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1841769Reviewed-by: default avatarFinnur Thorarinsson <finnur@chromium.org>
Reviewed-by: default avatarMatt Falkenhagen <falken@chromium.org>
Commit-Queue: Patrick Monette <pmonette@chromium.org>
Cr-Commit-Position: refs/heads/master@{#703772}
parent 9483b185
...@@ -1621,6 +1621,7 @@ class TestRegistrationObserver : public content::ServiceWorkerContextObserver { ...@@ -1621,6 +1621,7 @@ class TestRegistrationObserver : public content::ServiceWorkerContextObserver {
} }
void OnDestruct(content::ServiceWorkerContext* context) override { void OnDestruct(content::ServiceWorkerContext* context) override {
context_->RemoveObserver(this);
context_ = nullptr; context_ = nullptr;
} }
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/files/scoped_temp_dir.h" #include "base/files/scoped_temp_dir.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/scoped_observer.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "content/browser/service_worker/embedded_worker_test_helper.h" #include "content/browser/service_worker/embedded_worker_test_helper.h"
#include "content/browser/service_worker/fake_embedded_worker_instance_client.h" #include "content/browser/service_worker/fake_embedded_worker_instance_client.h"
...@@ -97,7 +98,7 @@ void ExpectRegisteredWorkers( ...@@ -97,7 +98,7 @@ void ExpectRegisteredWorkers(
class InstallActivateWorker : public FakeServiceWorker { class InstallActivateWorker : public FakeServiceWorker {
public: public:
InstallActivateWorker(EmbeddedWorkerTestHelper* helper) explicit InstallActivateWorker(EmbeddedWorkerTestHelper* helper)
: FakeServiceWorker(helper) {} : FakeServiceWorker(helper) {}
~InstallActivateWorker() override = default; ~InstallActivateWorker() override = default;
...@@ -258,18 +259,14 @@ class TestServiceWorkerContextObserver : public ServiceWorkerContextObserver { ...@@ -258,18 +259,14 @@ class TestServiceWorkerContextObserver : public ServiceWorkerContextObserver {
base::Optional<int64_t> version_id; base::Optional<int64_t> version_id;
base::Optional<int64_t> registration_id; base::Optional<int64_t> registration_id;
base::Optional<bool> is_running; base::Optional<bool> is_running;
base::Optional<ServiceWorkerContext*> context;
}; };
explicit TestServiceWorkerContextObserver(ServiceWorkerContext* context) explicit TestServiceWorkerContextObserver(ServiceWorkerContext* context)
: context_(context) { : scoped_observer_(this) {
context_->AddObserver(this); scoped_observer_.Add(context);
} }
~TestServiceWorkerContextObserver() override { ~TestServiceWorkerContextObserver() override = default;
if (context_)
context_->RemoveObserver(this);
}
void OnRegistrationCompleted(const GURL& scope) override { void OnRegistrationCompleted(const GURL& scope) override {
EventLog log; EventLog log;
...@@ -331,17 +328,18 @@ class TestServiceWorkerContextObserver : public ServiceWorkerContextObserver { ...@@ -331,17 +328,18 @@ class TestServiceWorkerContextObserver : public ServiceWorkerContextObserver {
} }
void OnDestruct(content::ServiceWorkerContext* context) override { void OnDestruct(content::ServiceWorkerContext* context) override {
scoped_observer_.Remove(context);
EventLog log; EventLog log;
log.type = EventType::Destruct; log.type = EventType::Destruct;
log.context = context;
events_.push_back(log); events_.push_back(log);
context_ = nullptr;
} }
const std::vector<EventLog>& events() { return events_; } const std::vector<EventLog>& events() { return events_; }
private: private:
ServiceWorkerContext* context_; ScopedObserver<ServiceWorkerContext, ServiceWorkerContextObserver>
scoped_observer_;
std::vector<EventLog> events_; std::vector<EventLog> events_;
DISALLOW_COPY_AND_ASSIGN(TestServiceWorkerContextObserver); DISALLOW_COPY_AND_ASSIGN(TestServiceWorkerContextObserver);
}; };
...@@ -528,7 +526,6 @@ TEST_F(ServiceWorkerContextTest, OnDestructObserver) { ...@@ -528,7 +526,6 @@ TEST_F(ServiceWorkerContextTest, OnDestructObserver) {
ASSERT_EQ(1u, observer.events().size()); ASSERT_EQ(1u, observer.events().size());
EXPECT_EQ(TestServiceWorkerContextObserver::EventType::Destruct, EXPECT_EQ(TestServiceWorkerContextObserver::EventType::Destruct,
observer.events()[0].type); observer.events()[0].type);
EXPECT_EQ(context, observer.events()[0].context);
} }
// Make sure basic registration is working. // Make sure basic registration is working.
......
...@@ -553,7 +553,8 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper ...@@ -553,7 +553,8 @@ class CONTENT_EXPORT ServiceWorkerContextWrapper
// Observers which live outside content's implementation boundary. Observer // Observers which live outside content's implementation boundary. Observer
// methods will always be dispatched on the UI thread. // methods will always be dispatched on the UI thread.
base::ObserverList<ServiceWorkerContextObserver>::Unchecked observer_list_; base::ObserverList<ServiceWorkerContextObserver, true>::Unchecked
observer_list_;
const std::unique_ptr<ServiceWorkerProcessManager> process_manager_; const std::unique_ptr<ServiceWorkerProcessManager> process_manager_;
// Cleared in ShutdownOnCoreThread(): // Cleared in ShutdownOnCoreThread():
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment