summaryrefslogtreecommitdiffstats
path: root/chrome/browser/automation/automation_resource_tracker.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/automation/automation_resource_tracker.cc')
-rw-r--r--chrome/browser/automation/automation_resource_tracker.cc76
1 files changed, 76 insertions, 0 deletions
diff --git a/chrome/browser/automation/automation_resource_tracker.cc b/chrome/browser/automation/automation_resource_tracker.cc
new file mode 100644
index 0000000..de20ba1
--- /dev/null
+++ b/chrome/browser/automation/automation_resource_tracker.cc
@@ -0,0 +1,76 @@
+// Copyright (c) 2006-2008 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 "chrome/browser/automation/automation_resource_tracker.h"
+
+#include "chrome/common/notification_service.h"
+#include "chrome/test/automation/automation_messages.h"
+
+int AutomationResourceTrackerImpl::AddImpl(void* resource) {
+ if (ContainsResourceImpl(resource))
+ return resource_to_handle_[resource];
+
+ int handle = GenerateHandle();
+ DCHECK(!ContainsHandleImpl(handle));
+
+ resource_to_handle_[resource] = handle;
+ handle_to_resource_[handle] = resource;
+
+ AddObserverTypeProxy(resource);
+
+ return handle;
+}
+
+void AutomationResourceTrackerImpl::RemoveImpl(void* resource) {
+ if (!ContainsResourceImpl(resource))
+ return;
+
+ int handle = resource_to_handle_[resource];
+ DCHECK(handle_to_resource_[handle] == resource);
+
+ RemoveObserverTypeProxy(resource);
+
+ resource_to_handle_.erase(resource);
+ handle_to_resource_.erase(handle);
+}
+
+int AutomationResourceTrackerImpl::GenerateHandle() {
+ static int handle = 0;
+ return ++handle;
+}
+
+bool AutomationResourceTrackerImpl::ContainsResourceImpl(void* resource) {
+ return resource_to_handle_.find(resource) != resource_to_handle_.end();
+}
+
+bool AutomationResourceTrackerImpl::ContainsHandleImpl(int handle) {
+ return handle_to_resource_.find(handle) != handle_to_resource_.end();
+}
+
+void* AutomationResourceTrackerImpl::GetResourceImpl(int handle) {
+ HandleToResourceMap::const_iterator iter = handle_to_resource_.find(handle);
+ if (iter == handle_to_resource_.end())
+ return NULL;
+
+ return iter->second;
+}
+
+int AutomationResourceTrackerImpl::GetHandleImpl(void* resource) {
+ ResourceToHandleMap::const_iterator iter =
+ resource_to_handle_.find(resource);
+ if (iter == resource_to_handle_.end())
+ return 0;
+
+ return iter->second;
+}
+
+void AutomationResourceTrackerImpl::HandleCloseNotification(void* resource) {
+ if (!ContainsResourceImpl(resource))
+ return;
+
+ sender_->Send(
+ new AutomationMsg_InvalidateHandle(0, resource_to_handle_[resource]));
+
+ RemoveImpl(resource);
+}