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

Side by Side Diff: third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp

Issue 2822453003: Wrap large IndexedDB values into Blobs before writing to LevelDB. (Closed)
Patch Set: Addressed last round of feedback. Created 3 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
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 * 1. Redistributions of source code must retain the above copyright 8 * 1. 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 * 10 *
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 #endif // DCHECK_IS_ON() 74 #endif // DCHECK_IS_ON()
75 request_->WebCallbacksDestroyed(); 75 request_->WebCallbacksDestroyed();
76 } 76 }
77 } 77 }
78 78
79 void WebIDBCallbacksImpl::OnError(const WebIDBDatabaseError& error) { 79 void WebIDBCallbacksImpl::OnError(const WebIDBDatabaseError& error) {
80 if (!request_) 80 if (!request_)
81 return; 81 return;
82 82
83 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "error"); 83 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "error");
84 request_->EnqueueResponse( 84 request_->HandleResponse(DOMException::Create(error.Code(), error.Message()));
85 DOMException::Create(error.Code(), error.Message()));
86 } 85 }
87 86
88 void WebIDBCallbacksImpl::OnSuccess( 87 void WebIDBCallbacksImpl::OnSuccess(
89 const WebVector<WebString>& web_string_list) { 88 const WebVector<WebString>& web_string_list) {
90 if (!request_) 89 if (!request_)
91 return; 90 return;
92 91
93 Vector<String> string_list; 92 Vector<String> string_list;
94 for (size_t i = 0; i < web_string_list.size(); ++i) 93 for (size_t i = 0; i < web_string_list.size(); ++i)
95 string_list.push_back(web_string_list[i]); 94 string_list.push_back(web_string_list[i]);
96 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success"); 95 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success");
96 #if DCHECK_IS_ON()
97 DCHECK(!request_->TransactionHasQueuedResults());
98 #endif // DCHECK_IS_ON()
97 request_->EnqueueResponse(string_list); 99 request_->EnqueueResponse(string_list);
98 } 100 }
99 101
100 void WebIDBCallbacksImpl::OnSuccess(WebIDBCursor* cursor, 102 void WebIDBCallbacksImpl::OnSuccess(WebIDBCursor* cursor,
101 const WebIDBKey& key, 103 const WebIDBKey& key,
102 const WebIDBKey& primary_key, 104 const WebIDBKey& primary_key,
103 const WebIDBValue& value) { 105 const WebIDBValue& value) {
104 if (!request_) 106 if (!request_)
105 return; 107 return;
106 108
107 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success"); 109 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success");
108 request_->EnqueueResponse(WTF::WrapUnique(cursor), key, primary_key, 110 request_->HandleResponse(WTF::WrapUnique(cursor), key, primary_key,
109 IDBValue::Create(value, request_->GetIsolate())); 111 IDBValue::Create(value, request_->GetIsolate()));
110 } 112 }
111 113
112 void WebIDBCallbacksImpl::OnSuccess(WebIDBDatabase* backend, 114 void WebIDBCallbacksImpl::OnSuccess(WebIDBDatabase* backend,
113 const WebIDBMetadata& metadata) { 115 const WebIDBMetadata& metadata) {
114 std::unique_ptr<WebIDBDatabase> db = WTF::WrapUnique(backend); 116 std::unique_ptr<WebIDBDatabase> db = WTF::WrapUnique(backend);
115 if (request_) { 117 if (request_) {
116 probe::AsyncTask async_task(request_->GetExecutionContext(), this, 118 probe::AsyncTask async_task(request_->GetExecutionContext(), this,
117 "success"); 119 "success");
120 #if DCHECK_IS_ON()
121 DCHECK(!request_->TransactionHasQueuedResults());
122 #endif // DCHECK_IS_ON()
118 request_->EnqueueResponse(std::move(db), IDBDatabaseMetadata(metadata)); 123 request_->EnqueueResponse(std::move(db), IDBDatabaseMetadata(metadata));
119 } else if (db) { 124 } else if (db) {
120 db->Close(); 125 db->Close();
121 } 126 }
122 } 127 }
123 128
124 void WebIDBCallbacksImpl::OnSuccess(const WebIDBKey& key) { 129 void WebIDBCallbacksImpl::OnSuccess(const WebIDBKey& key) {
125 if (!request_) 130 if (!request_)
126 return; 131 return;
127 132
128 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success"); 133 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success");
129 request_->EnqueueResponse(key); 134 request_->HandleResponse(key);
130 } 135 }
131 136
132 void WebIDBCallbacksImpl::OnSuccess(const WebIDBValue& value) { 137 void WebIDBCallbacksImpl::OnSuccess(const WebIDBValue& value) {
133 if (!request_) 138 if (!request_)
134 return; 139 return;
135 140
136 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success"); 141 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success");
137 request_->EnqueueResponse(IDBValue::Create(value, request_->GetIsolate())); 142 request_->HandleResponse(IDBValue::Create(value, request_->GetIsolate()));
138 } 143 }
139 144
140 void WebIDBCallbacksImpl::OnSuccess(const WebVector<WebIDBValue>& values) { 145 void WebIDBCallbacksImpl::OnSuccess(const WebVector<WebIDBValue>& values) {
141 if (!request_) 146 if (!request_)
142 return; 147 return;
143 148
144 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success"); 149 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success");
145 Vector<RefPtr<IDBValue>> idb_values(values.size()); 150 Vector<RefPtr<IDBValue>> idb_values(values.size());
146 for (size_t i = 0; i < values.size(); ++i) 151 for (size_t i = 0; i < values.size(); ++i)
147 idb_values[i] = IDBValue::Create(values[i], request_->GetIsolate()); 152 idb_values[i] = IDBValue::Create(values[i], request_->GetIsolate());
148 request_->EnqueueResponse(idb_values); 153 request_->HandleResponse(idb_values);
149 } 154 }
150 155
151 void WebIDBCallbacksImpl::OnSuccess(long long value) { 156 void WebIDBCallbacksImpl::OnSuccess(long long value) {
152 if (!request_) 157 if (!request_)
153 return; 158 return;
154 159
155 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success"); 160 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success");
156 request_->EnqueueResponse(value); 161 request_->HandleResponse(value);
157 } 162 }
158 163
159 void WebIDBCallbacksImpl::OnSuccess() { 164 void WebIDBCallbacksImpl::OnSuccess() {
160 if (!request_) 165 if (!request_)
161 return; 166 return;
162 167
163 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success"); 168 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success");
164 request_->EnqueueResponse(); 169 request_->HandleResponse();
165 } 170 }
166 171
167 void WebIDBCallbacksImpl::OnSuccess(const WebIDBKey& key, 172 void WebIDBCallbacksImpl::OnSuccess(const WebIDBKey& key,
168 const WebIDBKey& primary_key, 173 const WebIDBKey& primary_key,
169 const WebIDBValue& value) { 174 const WebIDBValue& value) {
170 if (!request_) 175 if (!request_)
171 return; 176 return;
172 177
173 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success"); 178 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "success");
174 request_->EnqueueResponse(key, primary_key, 179 request_->HandleResponse(key, primary_key,
175 IDBValue::Create(value, request_->GetIsolate())); 180 IDBValue::Create(value, request_->GetIsolate()));
176 } 181 }
177 182
178 void WebIDBCallbacksImpl::OnBlocked(long long old_version) { 183 void WebIDBCallbacksImpl::OnBlocked(long long old_version) {
179 if (!request_) 184 if (!request_)
180 return; 185 return;
181 186
182 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "blocked"); 187 probe::AsyncTask async_task(request_->GetExecutionContext(), this, "blocked");
188 #if DCHECK_IS_ON()
189 DCHECK(!request_->TransactionHasQueuedResults());
190 #endif // DCHECK_IS_ON()
183 request_->EnqueueBlocked(old_version); 191 request_->EnqueueBlocked(old_version);
184 } 192 }
185 193
186 void WebIDBCallbacksImpl::OnUpgradeNeeded(long long old_version, 194 void WebIDBCallbacksImpl::OnUpgradeNeeded(long long old_version,
187 WebIDBDatabase* database, 195 WebIDBDatabase* database,
188 const WebIDBMetadata& metadata, 196 const WebIDBMetadata& metadata,
189 unsigned short data_loss, 197 unsigned short data_loss,
190 WebString data_loss_message) { 198 WebString data_loss_message) {
191 std::unique_ptr<WebIDBDatabase> db = WTF::WrapUnique(database); 199 std::unique_ptr<WebIDBDatabase> db = WTF::WrapUnique(database);
192 if (request_) { 200 if (request_) {
193 probe::AsyncTask async_task(request_->GetExecutionContext(), this, 201 probe::AsyncTask async_task(request_->GetExecutionContext(), this,
194 "upgradeNeeded"); 202 "upgradeNeeded");
203 #if DCHECK_IS_ON()
204 DCHECK(!request_->TransactionHasQueuedResults());
205 #endif // DCHECK_IS_ON()
195 request_->EnqueueUpgradeNeeded( 206 request_->EnqueueUpgradeNeeded(
196 old_version, std::move(db), IDBDatabaseMetadata(metadata), 207 old_version, std::move(db), IDBDatabaseMetadata(metadata),
197 static_cast<WebIDBDataLoss>(data_loss), data_loss_message); 208 static_cast<WebIDBDataLoss>(data_loss), data_loss_message);
198 } else { 209 } else {
199 db->Close(); 210 db->Close();
200 } 211 }
201 } 212 }
202 213
203 void WebIDBCallbacksImpl::Detach() { 214 void WebIDBCallbacksImpl::Detach() {
204 request_.Clear(); 215 request_.Clear();
205 } 216 }
206 217
207 } // namespace blink 218 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698