summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-29 23:13:03 +0000
committerdcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-29 23:13:03 +0000
commit4abe0615215de43dd1fe9bf0d31eb62f006056f7 (patch)
tree5ef288113edf0a1efac511e5ef9d51771f03e269
parent23b59d264f46c72cd52407f7a028b0eea32b78d6 (diff)
downloadchromium_src-4abe0615215de43dd1fe9bf0d31eb62f006056f7.zip
chromium_src-4abe0615215de43dd1fe9bf0d31eb62f006056f7.tar.gz
chromium_src-4abe0615215de43dd1fe9bf0d31eb62f006056f7.tar.bz2
Revert 115997 - Replace MessageLoop::DeleteSoon implementation with one that uses base::Bind.
BUG=none TEST=none TBR=willchan,brettw,tony Review URL: http://codereview.chromium.org/9004051 TBR=dcheng@chromium.org Review URL: http://codereview.chromium.org/9034029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@115999 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--base/message_loop.cc6
-rw-r--r--base/message_loop.h10
-rw-r--r--base/message_loop_helpers.h73
-rw-r--r--base/message_loop_proxy.cc7
-rw-r--r--base/message_loop_proxy.h11
-rw-r--r--chrome/browser/browsing_data_quota_helper.h3
-rw-r--r--chrome/browser/browsing_data_remover.h3
-rw-r--r--chrome/browser/ui/views/browser_actions_container.h3
-rw-r--r--chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.h4
-rw-r--r--content/renderer/webplugin_delegate_proxy.h3
-rw-r--r--net/url_request/url_request_context_getter.h4
-rw-r--r--webkit/plugins/npapi/webplugin_delegate_impl.h4
-rw-r--r--webkit/plugins/ppapi/ppapi_webplugin_impl.h4
-rw-r--r--webkit/plugins/webview_plugin.h4
14 files changed, 17 insertions, 122 deletions
diff --git a/base/message_loop.cc b/base/message_loop.cc
index cf6d89b..f272a83 100644
--- a/base/message_loop.cc
+++ b/base/message_loop.cc
@@ -741,12 +741,6 @@ bool MessageLoop::DoIdleWork() {
return false;
}
-void MessageLoop::DeleteSoonInternal(const tracked_objects::Location& from_here,
- void(*deleter)(const void*),
- const void* object) {
- PostNonNestableTask(from_here, base::Bind(deleter, object));
-}
-
//------------------------------------------------------------------------------
// MessageLoop::AutoRunState
diff --git a/base/message_loop.h b/base/message_loop.h
index 02f4840..28ccd4e 100644
--- a/base/message_loop.h
+++ b/base/message_loop.h
@@ -14,7 +14,6 @@
#include "base/callback_forward.h"
#include "base/location.h"
#include "base/memory/ref_counted.h"
-#include "base/message_loop_helpers.h"
#include "base/message_loop_proxy.h"
#include "base/message_pump.h"
#include "base/observer_list.h"
@@ -209,8 +208,7 @@ class BASE_EXPORT MessageLoop : public base::MessagePump::Delegate {
// from RefCountedThreadSafe<T>!
template <class T>
void DeleteSoon(const tracked_objects::Location& from_here, const T* object) {
- base::subtle::DeleteHelperInternal<T, void>::DeleteOnMessageLoop(
- this, from_here, object);
+ PostNonNestableTask(from_here, new DeleteTask<T>(object));
}
// A variant on PostTask that releases the given reference counted object
@@ -534,12 +532,6 @@ class BASE_EXPORT MessageLoop : public base::MessagePump::Delegate {
scoped_refptr<base::MessageLoopProxy> message_loop_proxy_;
private:
- template <class T, class R> friend class base::subtle::DeleteHelperInternal;
-
- void DeleteSoonInternal(const tracked_objects::Location& from_here,
- void(*deleter)(const void*),
- const void* object);
-
DISALLOW_COPY_AND_ASSIGN(MessageLoop);
};
diff --git a/base/message_loop_helpers.h b/base/message_loop_helpers.h
deleted file mode 100644
index 151128c..0000000
--- a/base/message_loop_helpers.h
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_MESSAGE_LOOP_HELPERS_H_
-#define BASE_MESSAGE_LOOP_HELPERS_H_
-#pragma once
-
-#include "base/basictypes.h"
-
-namespace tracked_objects {
-class Location;
-}
-
-namespace base {
-
-namespace subtle {
-template <class T, class R> class DeleteHelperInternal;
-}
-
-// This is a template helper which uses a function indirection to erase T from
-// the function signature while still remembering it so we can call the correct
-// destructor. We use this trick so we don't need to include bind.h in a
-// header file. We also embed the function in a class to make it easier for
-// users of DeleteSoon to declare the helper as a friend.
-template <class T>
-class DeleteHelper {
- private:
- // TODO(dcheng): Move the return type back to a function template parameter.
- template <class T2, class R> friend class subtle::DeleteHelperInternal;
-
- static void DoDelete(const void* object) {
- delete reinterpret_cast<const T*>(object);
- }
-
- DISALLOW_COPY_AND_ASSIGN(DeleteHelper);
-};
-
-namespace subtle {
-
-// An internal MessageLoop-like class helper for DeleteHelper. We don't want to
-// expose DoDelete directly since the void* argument makes it possible to pass
-// an object of the wrong type to delete. Instead, we force callers to go
-// through DeleteHelperInternal for type safety. MessageLoop-like classes which
-// expose a DeleteSoon method should friend this class and implement a
-// DeleteSoonInternal method with the following signature:
-// bool(const tracked_objects::Location&,
-// void(*deleter)(const void*),
-// void* object)
-// An implementation of DeleteSoonInternal should simply create a base::Closure
-// from (deleter, object) and return the result of posting the task.
-template <class T, class ReturnType>
-class DeleteHelperInternal {
- public:
- template <class MessageLoopType>
- static ReturnType DeleteOnMessageLoop(
- MessageLoopType* message_loop,
- const tracked_objects::Location& from_here,
- const T* object) {
- return message_loop->DeleteSoonInternal(from_here,
- &DeleteHelper<T>::DoDelete,
- object);
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(DeleteHelperInternal);
-};
-
-} // namespace subtle
-
-} // namespace base
-
-#endif // BASE_MESSAGE_LOOP_HELPERS_H_
diff --git a/base/message_loop_proxy.cc b/base/message_loop_proxy.cc
index 63837d7..f9b4ad8 100644
--- a/base/message_loop_proxy.cc
+++ b/base/message_loop_proxy.cc
@@ -49,11 +49,4 @@ void MessageLoopProxy::OnDestruct() const {
delete this;
}
-bool MessageLoopProxy::DeleteSoonInternal(
- const tracked_objects::Location& from_here,
- void(*deleter)(const void*),
- const void* object) {
- return PostNonNestableTask(from_here, base::Bind(deleter, object));
-}
-
} // namespace base
diff --git a/base/message_loop_proxy.h b/base/message_loop_proxy.h
index 738f39f..aac11b9 100644
--- a/base/message_loop_proxy.h
+++ b/base/message_loop_proxy.h
@@ -10,7 +10,6 @@
#include "base/basictypes.h"
#include "base/callback_forward.h"
#include "base/memory/ref_counted.h"
-#include "base/message_loop_helpers.h"
#include "base/task.h"
namespace tracked_objects {
@@ -122,9 +121,8 @@ class BASE_EXPORT MessageLoopProxy
template <class T>
bool DeleteSoon(const tracked_objects::Location& from_here,
- const T* object) {
- return base::subtle::DeleteHelperInternal<T, bool>::DeleteOnMessageLoop(
- this, from_here, object);
+ T* object) {
+ return PostNonNestableTask(from_here, new DeleteTask<T>(object));
}
template <class T>
bool ReleaseSoon(const tracked_objects::Location& from_here,
@@ -137,7 +135,6 @@ class BASE_EXPORT MessageLoopProxy
static scoped_refptr<MessageLoopProxy> current();
protected:
- template <class T, class R> friend class subtle::DeleteHelperInternal;
friend class RefCountedThreadSafe<MessageLoopProxy, MessageLoopProxyTraits>;
friend struct MessageLoopProxyTraits;
@@ -147,10 +144,6 @@ class BASE_EXPORT MessageLoopProxy
// Called when the proxy is about to be deleted. Subclasses can override this
// to provide deletion on specific threads.
virtual void OnDestruct() const;
-
- bool DeleteSoonInternal(const tracked_objects::Location& from_here,
- void(*deleter)(const void*),
- const void* object);
};
struct MessageLoopProxyTraits {
diff --git a/chrome/browser/browsing_data_quota_helper.h b/chrome/browser/browsing_data_quota_helper.h
index b330bee..3632855 100644
--- a/chrome/browser/browsing_data_quota_helper.h
+++ b/chrome/browser/browsing_data_quota_helper.h
@@ -11,7 +11,6 @@
#include "base/callback.h"
#include "base/memory/ref_counted.h"
-#include "base/message_loop_helpers.h"
#include "base/message_loop_proxy.h"
#include "base/time.h"
#include "content/public/browser/browser_thread.h"
@@ -74,7 +73,7 @@ class BrowsingDataQuotaHelper
virtual ~BrowsingDataQuotaHelper();
private:
- friend class base::DeleteHelper<BrowsingDataQuotaHelper>;
+ friend class DeleteTask<const BrowsingDataQuotaHelper>;
friend struct BrowsingDataQuotaHelperDeleter;
scoped_refptr<base::MessageLoopProxy> io_thread_;
diff --git a/chrome/browser/browsing_data_remover.h b/chrome/browser/browsing_data_remover.h
index 9bc68d9..c445597 100644
--- a/chrome/browser/browsing_data_remover.h
+++ b/chrome/browser/browsing_data_remover.h
@@ -9,7 +9,6 @@
#include <set>
#include "base/memory/ref_counted.h"
-#include "base/message_loop_helpers.h"
#include "base/observer_list.h"
#include "base/synchronization/waitable_event_watcher.h"
#include "base/time.h"
@@ -143,7 +142,7 @@ class BrowsingDataRemover : public content::NotificationObserver,
// BrowsingDataRemover deletes itself (using DeleteTask) and is not supposed
// to be deleted by other objects so make destructor private and DeleteTask
// a friend.
- friend class base::DeleteHelper<BrowsingDataRemover>;
+ friend class DeleteTask<BrowsingDataRemover>;
virtual ~BrowsingDataRemover();
// content::NotificationObserver method. Callback when TemplateURLService has
diff --git a/chrome/browser/ui/views/browser_actions_container.h b/chrome/browser/ui/views/browser_actions_container.h
index 8a5d0ab..ca47cbb 100644
--- a/chrome/browser/ui/views/browser_actions_container.h
+++ b/chrome/browser/ui/views/browser_actions_container.h
@@ -13,7 +13,6 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/weak_ptr.h"
-#include "base/message_loop_helpers.h"
#include "chrome/browser/extensions/extension_context_menu_model.h"
#include "chrome/browser/extensions/extension_toolbar_model.h"
#include "chrome/browser/extensions/image_loading_tracker.h"
@@ -141,7 +140,7 @@ class BrowserActionButton : public views::MenuButton,
content::NotificationRegistrar registrar_;
- friend class base::DeleteHelper<BrowserActionButton>;
+ friend class DeleteTask<BrowserActionButton>;
DISALLOW_COPY_AND_ASSIGN(BrowserActionButton);
};
diff --git a/chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.h b/chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.h
index 15cfee3..b2ad2dd 100644
--- a/chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.h
+++ b/chrome/browser/ui/views/extensions/browser_action_overflow_menu_controller.h
@@ -11,7 +11,7 @@
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
-#include "base/message_loop_helpers.h"
+#include "base/task.h"
#include "ui/views/controls/menu/menu_delegate.h"
class BrowserActionsContainer;
@@ -111,7 +111,7 @@ class BrowserActionOverflowMenuController : public views::MenuDelegate {
// Whether this controller is being used for drop.
bool for_drop_;
- friend class base::DeleteHelper<BrowserActionOverflowMenuController>;
+ friend class DeleteTask<BrowserActionOverflowMenuController>;
DISALLOW_COPY_AND_ASSIGN(BrowserActionOverflowMenuController);
};
diff --git a/content/renderer/webplugin_delegate_proxy.h b/content/renderer/webplugin_delegate_proxy.h
index 9d76001..d89fd40 100644
--- a/content/renderer/webplugin_delegate_proxy.h
+++ b/content/renderer/webplugin_delegate_proxy.h
@@ -12,7 +12,6 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
-#include "base/message_loop_helpers.h"
#include "googleurl/src/gurl.h"
#include "ipc/ipc_channel.h"
#include "ipc/ipc_message.h"
@@ -133,7 +132,7 @@ class WebPluginDelegateProxy
gfx::PluginWindowHandle GetPluginWindowHandle();
protected:
- friend class base::DeleteHelper<WebPluginDelegateProxy>;
+ template<class WebPluginDelegateProxy> friend class DeleteTask;
virtual ~WebPluginDelegateProxy();
private:
diff --git a/net/url_request/url_request_context_getter.h b/net/url_request/url_request_context_getter.h
index a2475dd..88421f4 100644
--- a/net/url_request/url_request_context_getter.h
+++ b/net/url_request/url_request_context_getter.h
@@ -7,7 +7,7 @@
#pragma once
#include "base/memory/ref_counted.h"
-#include "base/message_loop_helpers.h"
+#include "base/task.h"
#include "net/base/net_export.h"
namespace base {
@@ -40,7 +40,7 @@ class NET_EXPORT URLRequestContextGetter
protected:
friend class base::RefCountedThreadSafe<URLRequestContextGetter,
URLRequestContextGetterTraits>;
- friend class base::DeleteHelper<URLRequestContextGetter>;
+ friend class DeleteTask<const URLRequestContextGetter>;
friend struct URLRequestContextGetterTraits;
URLRequestContextGetter();
diff --git a/webkit/plugins/npapi/webplugin_delegate_impl.h b/webkit/plugins/npapi/webplugin_delegate_impl.h
index 0a89903..bd83fa72 100644
--- a/webkit/plugins/npapi/webplugin_delegate_impl.h
+++ b/webkit/plugins/npapi/webplugin_delegate_impl.h
@@ -10,7 +10,7 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
-#include "base/message_loop_helpers.h"
+#include "base/task.h"
#include "base/time.h"
#include "base/timer.h"
#include "build/build_config.h"
@@ -231,7 +231,7 @@ class WEBKIT_PLUGINS_EXPORT WebPluginDelegateImpl : public WebPluginDelegate {
#endif
private:
- friend class base::DeleteHelper<WebPluginDelegateImpl>;
+ friend class DeleteTask<WebPluginDelegateImpl>;
friend class WebPluginDelegate;
WebPluginDelegateImpl(gfx::PluginWindowHandle containing_view,
diff --git a/webkit/plugins/ppapi/ppapi_webplugin_impl.h b/webkit/plugins/ppapi/ppapi_webplugin_impl.h
index 21e693f..40e4178 100644
--- a/webkit/plugins/ppapi/ppapi_webplugin_impl.h
+++ b/webkit/plugins/ppapi/ppapi_webplugin_impl.h
@@ -10,7 +10,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
-#include "base/message_loop_helpers.h"
+#include "base/task.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPlugin.h"
#include "ui/gfx/rect.h"
#include "webkit/plugins/webkit_plugins_export.h"
@@ -35,7 +35,7 @@ class WebPluginImpl : public WebKit::WebPlugin {
const base::WeakPtr<PluginDelegate>& plugin_delegate);
private:
- friend class base::DeleteHelper<WebPluginImpl>;
+ friend class DeleteTask<WebPluginImpl>;
WEBKIT_PLUGINS_EXPORT virtual ~WebPluginImpl();
diff --git a/webkit/plugins/webview_plugin.h b/webkit/plugins/webview_plugin.h
index 2915adda..0a9b5d9 100644
--- a/webkit/plugins/webview_plugin.h
+++ b/webkit/plugins/webview_plugin.h
@@ -8,7 +8,7 @@
#include <list>
#include "base/memory/scoped_ptr.h"
-#include "base/message_loop_helpers.h"
+#include "base/task.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPlugin.h"
@@ -142,7 +142,7 @@ class WebViewPlugin: public WebKit::WebPlugin, public WebKit::WebViewClient,
const WebKit::WebURLResponse& response);
private:
- friend class base::DeleteHelper<WebViewPlugin>;
+ friend class DeleteTask<WebViewPlugin>;
virtual ~WebViewPlugin();
Delegate* delegate_;