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

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: win_chromium_compile_dbg_ng is the worst 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();
45 ResourceType* resource() const { return m_resource.get(); } 45 ResourceType* resource() const { return m_resource.get(); }
46 46
47 DEFINE_INLINE_VIRTUAL_TRACE() {}
48
47 protected: 49 protected:
48 ResourceOwner(); 50 ResourceOwner();
49 ResourceOwner(const ResourceOwner& other) { setResource(other.resource()); }
50 explicit ResourceOwner(const ResourcePtr<ResourceType>&);
51 51
52 void setResource(const ResourcePtr<ResourceType>&); 52 void setResource(const ResourcePtr<ResourceType>&);
53 void clearResource(); 53 void clearResource() { setResource(nullptr); }
54
55 ResourceOwner& operator=(const ResourceOwner& other);
56 54
57 private: 55 private:
58 ResourcePtr<ResourceType> m_resource; 56 ResourcePtr<ResourceType> m_resource;
59 }; 57 };
60 58
61 template<class R, class C> 59 template<class R, class C>
62 inline ResourceOwner<R, C>::ResourceOwner() 60 inline ResourceOwner<R, C>::ResourceOwner()
63 { 61 {
64 } 62 }
65 63
66 template<class R, class C> 64 template<class R, class C>
67 inline ResourceOwner<R, C>::~ResourceOwner() 65 inline ResourceOwner<R, C>::~ResourceOwner()
68 { 66 {
69 clearResource(); 67 clearResource();
70 } 68 }
71 69
72 template<class R, class C> 70 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) 71 inline void ResourceOwner<R, C>::setResource(const ResourcePtr<R>& newResource)
82 { 72 {
83 if (newResource == m_resource) 73 if (newResource == m_resource)
84 return; 74 return;
85 75
86 // Some ResourceClient implementations reenter this so 76 // Some ResourceClient implementations reenter this so
87 // we need to prevent double removal. 77 // we need to prevent double removal.
88 if (ResourcePtr<ResourceType> oldResource = m_resource) { 78 if (ResourcePtr<ResourceType> oldResource = m_resource) {
89 m_resource.clear(); 79 m_resource.clear();
90 oldResource->removeClient(this); 80 oldResource->removeClient(this);
91 } 81 }
92 82
93 if (newResource) { 83 if (newResource) {
94 m_resource = newResource; 84 m_resource = newResource;
95 m_resource->addClient(this); 85 m_resource->addClient(this);
96 } 86 }
97 } 87 }
98 88
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 89 } // namespace blink
115 90
116 #endif 91 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/ScriptLoader.cpp ('k') | third_party/WebKit/Source/core/html/HTMLLinkElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698