Index: ui/base/gtk/g_object_destructor_filo.cc |
diff --git a/ui/base/gtk/g_object_destructor_filo.cc b/ui/base/gtk/g_object_destructor_filo.cc |
deleted file mode 100644 |
index fe253c799b0597a81d6d6894f89ec6bb759a680b..0000000000000000000000000000000000000000 |
--- a/ui/base/gtk/g_object_destructor_filo.cc |
+++ /dev/null |
@@ -1,89 +0,0 @@ |
-// Copyright (c) 2012 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. |
- |
-#include "ui/base/gtk/g_object_destructor_filo.h" |
- |
-#include <glib-object.h> |
- |
-#include "base/logging.h" |
-#include "base/memory/singleton.h" |
- |
-namespace ui { |
- |
-GObjectDestructorFILO::GObjectDestructorFILO() { |
-} |
- |
-GObjectDestructorFILO::~GObjectDestructorFILO() { |
- // Probably CHECK(handler_map_.empty()) would look natural here. But |
- // some tests (some views_unittests) violate this assertion. |
-} |
- |
-// static |
-GObjectDestructorFILO* GObjectDestructorFILO::GetInstance() { |
- return Singleton<GObjectDestructorFILO>::get(); |
-} |
- |
-void GObjectDestructorFILO::Connect( |
- GObject* object, DestructorHook callback, void* context) { |
- const Hook hook(object, callback, context); |
- HandlerMap::iterator iter = handler_map_.find(object); |
- if (iter == handler_map_.end()) { |
- g_object_weak_ref(object, WeakNotifyThunk, this); |
- handler_map_[object].push_front(hook); |
- } else { |
- iter->second.push_front(hook); |
- } |
-} |
- |
-void GObjectDestructorFILO::Disconnect( |
- GObject* object, DestructorHook callback, void* context) { |
- HandlerMap::iterator iter = handler_map_.find(object); |
- if (iter == handler_map_.end()) { |
- LOG(DFATAL) << "Unable to disconnect destructor hook for object " << object |
- << ": hook not found (" << callback << ", " << context << ")."; |
- return; |
- } |
- HandlerList& dtors = iter->second; |
- if (dtors.empty()) { |
- LOG(DFATAL) << "Destructor list is empty for specified object " << object |
- << " Maybe it is being executed?"; |
- return; |
- } |
- if (!dtors.front().equal(object, callback, context)) { |
- // Reenable this warning once this bug is fixed: |
- // http://code.google.com/p/chromium/issues/detail?id=85603 |
- DVLOG(1) << "Destructors should be unregistered the reverse order they " |
- << "were registered. But for object " << object << " " |
- << "deleted hook is "<< context << ", the last queued hook is " |
- << dtors.front().context; |
- } |
- for (HandlerList::iterator i = dtors.begin(); i != dtors.end(); ++i) { |
- if (i->equal(object, callback, context)) { |
- dtors.erase(i); |
- break; |
- } |
- } |
- if (dtors.empty()) { |
- g_object_weak_unref(object, WeakNotifyThunk, this); |
- handler_map_.erase(iter); |
- } |
-} |
- |
-void GObjectDestructorFILO::WeakNotify(GObject* where_the_object_was) { |
- HandlerMap::iterator iter = handler_map_.find(where_the_object_was); |
- DCHECK(iter != handler_map_.end()); |
- DCHECK(!iter->second.empty()); |
- |
- // Save destructor list for given object into local copy to avoid reentrancy |
- // problem: if callee wants to modify the caller list. |
- HandlerList dtors; |
- iter->second.swap(dtors); |
- handler_map_.erase(iter); |
- |
- // Execute hooks in local list in FILO order. |
- for (HandlerList::iterator i = dtors.begin(); i != dtors.end(); ++i) |
- i->callback(i->context, where_the_object_was); |
-} |
- |
-} // napespace ui |