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

Side by Side Diff: third_party/WebKit/Source/core/fetch/ResourceOwner.h

Issue 1569273004: Move ResourceOwner on to the oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 19 matching lines...) Expand all
30 30
31 #ifndef ResourceOwner_h 31 #ifndef ResourceOwner_h
32 #define ResourceOwner_h 32 #define ResourceOwner_h
33 33
34 #include "core/fetch/ResourcePtr.h" 34 #include "core/fetch/ResourcePtr.h"
35 35
36 namespace blink { 36 namespace blink {
37 37
38 38
39 template<class R, class C = typename R::ClientType> 39 template<class R, class C = typename R::ClientType>
40 class ResourceOwner : public C { 40 class ResourceOwner : public WillBeGarbageCollectedMixin, public C {
41 public: 41 public:
42 using ResourceType = R; 42 using ResourceType = R;
43 43
44 virtual ~ResourceOwner(); 44 virtual ~ResourceOwner() { clearResource(); }
yhirano 2016/01/12 07:54:49 You cannot call clearResource() in the destructor
Nate Chapin 2016/01/13 20:36:33 Done.
45 ResourceType* resource() const { return m_resource.get(); } 45 ResourceType* resource() const { return m_resource.get(); }
46 46
47 protected: 47 protected:
48 ResourceOwner(); 48 ResourceOwner() {}
49 ResourceOwner(const ResourceOwner& other) { setResource(other.resource()); }
50 explicit ResourceOwner(const ResourcePtr<ResourceType>&);
51 49
52 void setResource(const ResourcePtr<ResourceType>&); 50 void setResource(const ResourcePtr<ResourceType>&);
53 void clearResource(); 51 void clearResource() { setResource(nullptr); }
54
55 ResourceOwner& operator=(const ResourceOwner& other);
56 52
57 private: 53 private:
58 ResourcePtr<ResourceType> m_resource; 54 ResourcePtr<ResourceType> m_resource;
59 }; 55 };
60 56
61 template<class R, class C> 57 template<class R, class C>
62 inline ResourceOwner<R, C>::ResourceOwner()
63 {
64 }
65
66 template<class R, class C>
67 inline ResourceOwner<R, C>::~ResourceOwner()
68 {
69 clearResource();
70 }
71
72 template<class R, class C>
73 inline ResourceOwner<R, C>::ResourceOwner(const ResourcePtr<R>& resource)
74 : m_resource(resource)
75 {
76 if (m_resource)
77 m_resource->addClient(this);
78 }
79
80 template<class R, class C>
81 inline void ResourceOwner<R, C>::setResource(const ResourcePtr<R>& newResource) 58 inline void ResourceOwner<R, C>::setResource(const ResourcePtr<R>& newResource)
82 { 59 {
83 if (newResource == m_resource) 60 if (newResource == m_resource)
84 return; 61 return;
85 62
86 // Some ResourceClient implementations reenter this so 63 // Some ResourceClient implementations reenter this so
87 // we need to prevent double removal. 64 // we need to prevent double removal.
88 if (ResourcePtr<ResourceType> oldResource = m_resource) { 65 if (ResourcePtr<ResourceType> oldResource = m_resource) {
89 m_resource.clear(); 66 m_resource.clear();
90 oldResource->removeClient(this); 67 oldResource->removeClient(this);
91 } 68 }
92 69
93 if (newResource) { 70 if (newResource) {
94 m_resource = newResource; 71 m_resource = newResource;
95 m_resource->addClient(this); 72 m_resource->addClient(this);
96 } 73 }
97 } 74 }
98 75
99 template<class R, class C>
100 inline void ResourceOwner<R, C>::clearResource()
101 {
102 setResource(0);
103 }
104
105 template<class R, class C>
106 inline ResourceOwner<R, C>& ResourceOwner<R, C>::operator=(const ResourceOwner<R , C>& other)
107 {
108 if (this == &other)
109 return *this;
110 setResource(other.resource());
111 return *this;
112 }
113
114 } // namespace blink 76 } // namespace blink
115 77
116 #endif 78 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698