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

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

Issue 2020313002: Verify the order of RawResourceClient callbacks in DocumentThreadableLoader (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/fetch/RawResource.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de)
3 Copyright (C) 2001 Dirk Mueller <mueller@kde.org> 3 Copyright (C) 2001 Dirk Mueller <mueller@kde.org>
4 Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com) 4 Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
5 Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. 5 Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 104
105 class CORE_EXPORT RawResourceClient : public ResourceClient { 105 class CORE_EXPORT RawResourceClient : public ResourceClient {
106 public: 106 public:
107 RawResourceClient() 107 RawResourceClient()
108 : m_weakFactory(this) { } 108 : m_weakFactory(this) { }
109 WeakPtr<RawResourceClient> createWeakPtr() { return m_weakFactory.createWeak Ptr(); } 109 WeakPtr<RawResourceClient> createWeakPtr() { return m_weakFactory.createWeak Ptr(); }
110 ~RawResourceClient() override {} 110 ~RawResourceClient() override {}
111 static bool isExpectedType(ResourceClient* client) { return client->getResou rceClientType() == RawResourceType; } 111 static bool isExpectedType(ResourceClient* client) { return client->getResou rceClientType() == RawResourceType; }
112 ResourceClientType getResourceClientType() const final { return RawResourceT ype; } 112 ResourceClientType getResourceClientType() const final { return RawResourceT ype; }
113 113
114 // The order of the callbacks is as follows:
115 // [Case 1] A successful load:
116 // 0+ redirectReceived() and/or dataSent()
117 // 1 responseReceived()
118 // 0-1 setSerializedCachedMetadata()
119 // 0+ dataReceived() or dataDownloaded(), but never both
120 // 1 notifyFinished() with errorOccurred() = false
121 // [Case 2] When redirect is blocked:
122 // 0+ redirectReceived() and/or dataSent()
123 // 1 redirectBlocked()
124 // 1 notifyFinished() with errorOccurred() = true
125 // [Case 3] Other failures:
126 // notifyFinished() with errorOccurred() = true is called at any time
127 // (unless notifyFinished() is already called).
128 // In all cases:
129 // No callbacks are made after notifyFinished() or
130 // removeClient() is called.
114 virtual void dataSent(Resource*, unsigned long long /* bytesSent */, unsigne d long long /* totalBytesToBeSent */) { } 131 virtual void dataSent(Resource*, unsigned long long /* bytesSent */, unsigne d long long /* totalBytesToBeSent */) { }
115 virtual void responseReceived(Resource*, const ResourceResponse&, PassOwnPtr <WebDataConsumerHandle>) { } 132 virtual void responseReceived(Resource*, const ResourceResponse&, PassOwnPtr <WebDataConsumerHandle>) { }
116 virtual void setSerializedCachedMetadata(Resource*, const char*, size_t) { } 133 virtual void setSerializedCachedMetadata(Resource*, const char*, size_t) { }
117 virtual void dataReceived(Resource*, const char* /* data */, size_t /* lengt h */) { } 134 virtual void dataReceived(Resource*, const char* /* data */, size_t /* lengt h */) { }
118 virtual void redirectReceived(Resource*, ResourceRequest&, const ResourceRes ponse&) { } 135 virtual void redirectReceived(Resource*, ResourceRequest&, const ResourceRes ponse&) { }
119 virtual void redirectBlocked() {} 136 virtual void redirectBlocked() {}
120 virtual void dataDownloaded(Resource*, int) { } 137 virtual void dataDownloaded(Resource*, int) { }
121 virtual void didReceiveResourceTiming(Resource*, const ResourceTimingInfo&) { } 138 virtual void didReceiveResourceTiming(Resource*, const ResourceTimingInfo&) { }
122 139
123 private: 140 private:
124 WeakPtrFactory<RawResourceClient> m_weakFactory; 141 WeakPtrFactory<RawResourceClient> m_weakFactory;
125 }; 142 };
126 143
144 // Checks the sequence of callbacks of RawResourceClient.
145 // This can be used only when a RawResourceClient is added as a client to
146 // at most one RawResource.
147 class CORE_EXPORT RawResourceClientStateChecker {
yhirano 2016/06/03 07:25:13 +final
hiroshige 2016/08/03 11:50:34 Done.
148 public:
149 RawResourceClientStateChecker();
150 ~RawResourceClientStateChecker();
151
152 // Call before addClient()/removeClient() is called.
153 void willAddClient();
yhirano 2016/06/03 07:25:13 I'm a bit concerned about the case when DocumentTh
hiroshige 2016/06/03 09:58:38 ResourceOwner::setResource() is |protected|. Doesn
yhirano 2016/06/07 05:18:25 I didn't notice that, thank you. But ResourceOwner
hiroshige 2016/08/03 11:50:34 Done.
154 void willRemoveClient();
155
156 // Call RawResourceClientStateChecker::f() at the beginning of
157 // RawResourceClient::f().
158 void redirectReceived();
159 void redirectBlocked();
160 void dataSent();
161 void responseReceived();
162 void setSerializedCachedMetadata();
163 void dataReceived();
164 void dataDownloaded();
165 void notifyFinished(Resource*);
166
167 private:
168 enum State {
169 NotAddedAsClient,
170 Started,
171 RedirectBlocked,
172 ResponseReceived,
173 SetSerializedCachedMetadata,
174 DataReceived,
175 DataDownloaded,
176 NotifyFinished
177 };
178 State m_state;
179 };
180
127 } // namespace blink 181 } // namespace blink
128 182
129 #endif // RawResource_h 183 #endif // RawResource_h
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/fetch/RawResource.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698