Commit e9e84753 authored by Joshua Bell's avatar Joshua Bell Committed by Commit Bot

Simplify HostZoomLevelContext lifetime

The HostZoomLevelContext class was refcounted, but only ever owned by
a StoragePartitionImpl so remove the refcounting. It also had a custom
deleter doing basically the same work as DeleteOnUIThread so use that
instead. De-virtualize the destructor, too.

Change-Id: I75bf780953e6420e00d488af1560262ca4ed7188
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2028934
Auto-Submit: Joshua Bell <jsbell@chromium.org>
Commit-Queue: James MacLean <wjmaclean@chromium.org>
Reviewed-by: default avatarJames MacLean <wjmaclean@chromium.org>
Cr-Commit-Position: refs/heads/master@{#743119}
parent b0bdadd5
......@@ -6,11 +6,7 @@
#include <utility>
#include "base/files/file_path.h"
#include "base/task/post_task.h"
#include "content/browser/host_zoom_map_impl.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
namespace content {
......@@ -22,15 +18,6 @@ HostZoomLevelContext::HostZoomLevelContext(
zoom_level_delegate_->InitHostZoomMap(host_zoom_map_impl_.get());
}
HostZoomLevelContext::~HostZoomLevelContext() {}
void HostZoomLevelContext::DeleteOnCorrectThread() const {
if (BrowserThread::IsThreadInitialized(BrowserThread::UI) &&
!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
base::DeleteSoon(FROM_HERE, {BrowserThread::UI}, this);
return;
}
delete this;
}
HostZoomLevelContext::~HostZoomLevelContext() = default;
} // namespace content
......@@ -8,19 +8,17 @@
#include <memory>
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "content/browser/host_zoom_map_impl.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/zoom_level_delegate.h"
namespace content {
struct HostZoomLevelContextDeleter;
// This class manages a HostZoomMap and associates it with a ZoomLevelDelegate,
// if one is provided. It also serves to keep the zoom level machinery details
// separate from the owning StoragePartitionImpl.
class HostZoomLevelContext
: public base::RefCountedThreadSafe<HostZoomLevelContext,
HostZoomLevelContextDeleter> {
// separate from the owning StoragePartitionImpl. It must be destroyed on the
// UI thread.
class HostZoomLevelContext {
public:
explicit HostZoomLevelContext(
std::unique_ptr<ZoomLevelDelegate> zoom_level_delegate);
......@@ -30,16 +28,11 @@ class HostZoomLevelContext
return zoom_level_delegate_.get();
}
protected:
virtual ~HostZoomLevelContext();
private:
friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>;
friend class base::DeleteHelper<HostZoomLevelContext>;
friend class base::RefCountedThreadSafe<HostZoomLevelContext,
HostZoomLevelContextDeleter>;
friend struct HostZoomLevelContextDeleter;
void DeleteOnCorrectThread() const;
~HostZoomLevelContext();
std::unique_ptr<HostZoomMapImpl> host_zoom_map_impl_;
// Release the delegate before the HostZoomMap, in case it is carrying
......@@ -49,12 +42,6 @@ class HostZoomLevelContext
DISALLOW_COPY_AND_ASSIGN(HostZoomLevelContext);
};
struct HostZoomLevelContextDeleter {
static void Destruct(const HostZoomLevelContext* context) {
context->DeleteOnCorrectThread();
}
};
} // namespace content
#endif // CONTENT_BROWSER_HOST_ZOOM_LEVEL_CONTEXT_H_
......@@ -1419,8 +1419,8 @@ void StoragePartitionImpl::Initialize() {
browser_context_, service_worker_context_);
#if !defined(OS_ANDROID)
host_zoom_level_context_ = new HostZoomLevelContext(
browser_context_->CreateZoomLevelDelegate(partition_path_));
host_zoom_level_context_.reset(new HostZoomLevelContext(
browser_context_->CreateZoomLevelDelegate(partition_path_)));
#endif // !defined(OS_ANDROID)
platform_notification_context_ = new PlatformNotificationContextImpl(
......
......@@ -476,7 +476,8 @@ class CONTENT_EXPORT StoragePartitionImpl
std::unique_ptr<PushMessagingContext> push_messaging_context_;
scoped_refptr<storage::SpecialStoragePolicy> special_storage_policy_;
#if !defined(OS_ANDROID)
scoped_refptr<HostZoomLevelContext> host_zoom_level_context_;
std::unique_ptr<HostZoomLevelContext, BrowserThread::DeleteOnUIThread>
host_zoom_level_context_;
#endif // !defined(OS_ANDROID)
scoped_refptr<PlatformNotificationContextImpl> platform_notification_context_;
scoped_refptr<BackgroundFetchContext> background_fetch_context_;
......
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