OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 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 | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 // but only after the worker run loop stops processing tasks. So even in | 147 // but only after the worker run loop stops processing tasks. So even in |
148 // the most interleaved case, we have: | 148 // the most interleaved case, we have: |
149 // W AllowIndexedDBMainThreadBridge schedules allowIndexedDBTask | 149 // W AllowIndexedDBMainThreadBridge schedules allowIndexedDBTask |
150 // M workerRunLoop marked as killed | 150 // M workerRunLoop marked as killed |
151 // W runLoop stops and schedules object deletion on main thread | 151 // W runLoop stops and schedules object deletion on main thread |
152 // M allowIndexedDBTask calls commonClient->allowIndexedDB() | 152 // M allowIndexedDBTask calls commonClient->allowIndexedDB() |
153 // M WebWorkerBase and WebCommonWorkerClient are deleted | 153 // M WebWorkerBase and WebCommonWorkerClient are deleted |
154 WebWorkerBase* m_webWorkerBase; | 154 WebWorkerBase* m_webWorkerBase; |
155 }; | 155 }; |
156 | 156 |
157 bool IDBFactoryBackendProxy::allowIndexedDB(ScriptExecutionContext* context, con
st String& name, const WebSecurityOrigin& origin, PassRefPtr<IDBCallbacks> callb
acks) | 157 bool IDBFactoryBackendProxy::allowIndexedDB(ScriptExecutionContext* context, con
st String& name, const WebSecurityOrigin& origin, IDBCallbacks* callbacks) |
158 { | 158 { |
159 bool allowed; | 159 bool allowed; |
160 ASSERT_WITH_SECURITY_IMPLICATION(context->isDocument() || context->isWorkerC
ontext()); | 160 ASSERT_WITH_SECURITY_IMPLICATION(context->isDocument() || context->isWorkerC
ontext()); |
161 if (context->isDocument()) { | 161 if (context->isDocument()) { |
162 Document* document = static_cast<Document*>(context); | 162 Document* document = static_cast<Document*>(context); |
163 WebFrameImpl* webFrame = WebFrameImpl::fromFrame(document->frame()); | 163 WebFrameImpl* webFrame = WebFrameImpl::fromFrame(document->frame()); |
164 WebViewImpl* webView = webFrame->viewImpl(); | 164 WebViewImpl* webView = webFrame->viewImpl(); |
165 // FIXME: webView->permissionClient() returns 0 in test_shell and conten
t_shell http://crbug.com/137269 | 165 // FIXME: webView->permissionClient() returns 0 in test_shell and conten
t_shell http://crbug.com/137269 |
166 allowed = !webView->permissionClient() || webView->permissionClient()->a
llowIndexedDB(webFrame, name, origin); | 166 allowed = !webView->permissionClient() || webView->permissionClient()->a
llowIndexedDB(webFrame, name, origin); |
167 } else { | 167 } else { |
(...skipping 12 matching lines...) Expand all Loading... |
180 } | 180 } |
181 allowed = bridge->result(); | 181 allowed = bridge->result(); |
182 } | 182 } |
183 | 183 |
184 if (!allowed) | 184 if (!allowed) |
185 callbacks->onError(WebIDBDatabaseError(IDBDatabaseException::UnknownErro
r, "The user denied permission to access the database.")); | 185 callbacks->onError(WebIDBDatabaseError(IDBDatabaseException::UnknownErro
r, "The user denied permission to access the database.")); |
186 | 186 |
187 return allowed; | 187 return allowed; |
188 } | 188 } |
189 | 189 |
190 void IDBFactoryBackendProxy::getDatabaseNames(PassRefPtr<IDBCallbacks> prpCallba
cks, const String& databaseIdentifier, ScriptExecutionContext* context, const St
ring& dataDir) | 190 void IDBFactoryBackendProxy::getDatabaseNames(IDBCallbacks* callbacks, const Str
ing& databaseIdentifier, ScriptExecutionContext* context, const String& dataDir) |
191 { | 191 { |
192 RefPtr<IDBCallbacks> callbacks(prpCallbacks); | |
193 WebSecurityOrigin origin(context->securityOrigin()); | 192 WebSecurityOrigin origin(context->securityOrigin()); |
194 if (!allowIndexedDB(context, "Database Listing", origin, callbacks)) | 193 if (!allowIndexedDB(context, "Database Listing", origin, callbacks)) |
195 return; | 194 return; |
196 | 195 |
197 m_webIDBFactory->getDatabaseNames(new WebIDBCallbacksImpl(callbacks), databa
seIdentifier, dataDir); | 196 m_webIDBFactory->getDatabaseNames(new WebIDBCallbacksImpl(callbacks), databa
seIdentifier, dataDir); |
198 } | 197 } |
199 | 198 |
200 void IDBFactoryBackendProxy::open(const String& name, int64_t version, int64_t t
ransactionId, PassRefPtr<IDBCallbacks> prpCallbacks, PassRefPtr<IDBDatabaseCallb
acks> prpDatabaseCallbacks, const String& databaseIdentifier, ScriptExecutionCon
text* context, const String& dataDir) | 199 void IDBFactoryBackendProxy::open(const String& name, int64_t version, int64_t t
ransactionId, IDBCallbacks* callbacks, IDBDatabaseCallbacks* databaseCallbacks,
const String& databaseIdentifier, ScriptExecutionContext* context, const String&
dataDir) |
201 { | 200 { |
202 RefPtr<IDBCallbacks> callbacks(prpCallbacks); | |
203 RefPtr<IDBDatabaseCallbacks> databaseCallbacks(prpDatabaseCallbacks); | |
204 WebSecurityOrigin origin(context->securityOrigin()); | 201 WebSecurityOrigin origin(context->securityOrigin()); |
205 if (!allowIndexedDB(context, name, origin, callbacks)) | 202 if (!allowIndexedDB(context, name, origin, callbacks)) |
206 return; | 203 return; |
207 | 204 |
208 m_webIDBFactory->open(name, version, transactionId, new WebIDBCallbacksImpl(
callbacks), new WebIDBDatabaseCallbacksImpl(databaseCallbacks), databaseIdentifi
er, dataDir); | 205 m_webIDBFactory->open(name, version, transactionId, new WebIDBCallbacksImpl(
callbacks), new WebIDBDatabaseCallbacksImpl(databaseCallbacks), databaseIdentifi
er, dataDir); |
209 } | 206 } |
210 | 207 |
211 void IDBFactoryBackendProxy::deleteDatabase(const String& name, PassRefPtr<IDBCa
llbacks> prpCallbacks, const String& databaseIdentifier, ScriptExecutionContext*
context, const String& dataDir) | 208 void IDBFactoryBackendProxy::deleteDatabase(const String& name, IDBCallbacks* ca
llbacks, const String& databaseIdentifier, ScriptExecutionContext* context, cons
t String& dataDir) |
212 { | 209 { |
213 RefPtr<IDBCallbacks> callbacks(prpCallbacks); | |
214 WebSecurityOrigin origin(context->securityOrigin()); | 210 WebSecurityOrigin origin(context->securityOrigin()); |
215 if (!allowIndexedDB(context, name, origin, callbacks)) | 211 if (!allowIndexedDB(context, name, origin, callbacks)) |
216 return; | 212 return; |
217 | 213 |
218 m_webIDBFactory->deleteDatabase(name, new WebIDBCallbacksImpl(callbacks), da
tabaseIdentifier, dataDir); | 214 m_webIDBFactory->deleteDatabase(name, new WebIDBCallbacksImpl(callbacks), da
tabaseIdentifier, dataDir); |
219 } | 215 } |
220 | 216 |
221 } // namespace WebKit | 217 } // namespace WebKit |
OLD | NEW |