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