Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Side by Side Diff: native_client_sdk/src/tests/nacl_io_test/fake_resource_manager.cc

Issue 77423002: [NaCl SDK] Add URLLoader fake pepper interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: feedback Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "fake_resource_manager.h" 5 #include "fake_resource_manager.h"
6 #include "gtest/gtest.h" 6 #include "gtest/gtest.h"
7 #include "sdk_util/auto_lock.h" 7 #include "sdk_util/auto_lock.h"
8 8
9 FakeResourceManager::FakeResourceManager() : next_handle_(1) {} 9 FakeResourceManager::FakeResourceManager() : next_handle_(1) {}
10 10
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 EXPECT_LT(0, resource_tracker->ref_count()) << "AddRefing freed resource " 50 EXPECT_LT(0, resource_tracker->ref_count()) << "AddRefing freed resource "
51 << resource_tracker->classname() 51 << resource_tracker->classname()
52 << "(" << handle 52 << "(" << handle
53 << "), created at " 53 << "), created at "
54 << resource_tracker->file() << ":" 54 << resource_tracker->file() << ":"
55 << resource_tracker->line(); 55 << resource_tracker->line();
56 resource_tracker->AddRef(); 56 resource_tracker->AddRef();
57 } 57 }
58 58
59 void FakeResourceManager::Release(PP_Resource handle) { 59 void FakeResourceManager::Release(PP_Resource handle) {
60 AUTO_LOCK(lock_); 60 sdk_util::AutoLock lock(lock_);
61 ResourceMap::iterator iter = resource_map_.find(handle); 61 ResourceMap::iterator iter = resource_map_.find(handle);
62 ASSERT_NE(resource_map_.end(), iter) << "Releasing unknown resource " 62 ASSERT_NE(resource_map_.end(), iter) << "Releasing unknown resource "
63 << handle; 63 << handle;
64 64
65 FakeResourceTracker* resource_tracker = iter->second; 65 FakeResourceTracker* resource_tracker = iter->second;
66 EXPECT_LT(0, resource_tracker->ref_count()) << "Releasing freed resource " 66 EXPECT_LT(0, resource_tracker->ref_count()) << "Releasing freed resource "
67 << resource_tracker->classname() 67 << resource_tracker->classname()
68 << "(" << handle 68 << "(" << handle
69 << "), created at " 69 << "), created at "
70 << resource_tracker->file() << ":" 70 << resource_tracker->file() << ":"
71 << resource_tracker->line(); 71 << resource_tracker->line();
72 resource_tracker->Release(); 72 resource_tracker->Release();
73 // It's OK to access the tracker when its refcount is zero; it doesn't
74 // actually destroy the object until the manager is destroyed.
75 if (resource_tracker->ref_count() == 0) {
76 // Remove the resource from this tracker.
77 FakeResource* resource = resource_tracker->Pass();
78 // Release the lock before we call Destroy; resources can call
79 // FakeResourceManager::Release(), which will deadlock if we are already
80 // holding the lock.
81 lock.Unlock();
82
83 resource->Destroy();
84 }
73 } 85 }
74 86
75 FakeResourceTracker* FakeResourceManager::Get(PP_Resource handle) { 87 FakeResourceTracker* FakeResourceManager::Get(PP_Resource handle) {
76 AUTO_LOCK(lock_); 88 AUTO_LOCK(lock_);
77 ResourceMap::iterator iter = resource_map_.find(handle); 89 ResourceMap::iterator iter = resource_map_.find(handle);
78 if (iter == resource_map_.end()) { 90 if (iter == resource_map_.end()) {
79 // Can't use FAIL() because it tries to return void. 91 // Can't use FAIL() because it tries to return void.
80 EXPECT_TRUE(false) << "Trying to get resource " << handle 92 EXPECT_TRUE(false) << "Trying to get resource " << handle
81 << " that doesn't exist!"; 93 << " that doesn't exist!";
82 return NULL; 94 return NULL;
(...skipping 25 matching lines...) Expand all
108 bool FakeResourceTracker::CheckType(const char* other_classname) const { 120 bool FakeResourceTracker::CheckType(const char* other_classname) const {
109 if (strcmp(other_classname, classname_) != 0) { 121 if (strcmp(other_classname, classname_) != 0) {
110 // Repeat the expectation, just to print out a nice error message before we 122 // Repeat the expectation, just to print out a nice error message before we
111 // crash. :) 123 // crash. :)
112 EXPECT_STREQ(classname_, other_classname); 124 EXPECT_STREQ(classname_, other_classname);
113 return false; 125 return false;
114 } 126 }
115 127
116 return true; 128 return true;
117 } 129 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698