OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 | 56 |
57 static bool IsContextValid(ExecutionContext* context) { | 57 static bool IsContextValid(ExecutionContext* context) { |
58 DCHECK(context->IsDocument() || context->IsWorkerGlobalScope()); | 58 DCHECK(context->IsDocument() || context->IsWorkerGlobalScope()); |
59 if (context->IsDocument()) { | 59 if (context->IsDocument()) { |
60 Document* document = ToDocument(context); | 60 Document* document = ToDocument(context); |
61 return document->GetFrame() && document->GetPage(); | 61 return document->GetFrame() && document->GetPage(); |
62 } | 62 } |
63 return true; | 63 return true; |
64 } | 64 } |
65 | 65 |
66 IDBRequest* IDBFactory::getDatabaseNames(ScriptState* script_state, | 66 IDBRequest* IDBFactory::GetDatabaseNames(ScriptState* script_state) { |
67 ExceptionState& exception_state) { | |
68 IDB_TRACE("IDBFactory::getDatabaseNames"); | |
69 if (!IsContextValid(ExecutionContext::From(script_state))) | |
70 return nullptr; | |
71 if (!ExecutionContext::From(script_state) | |
72 ->GetSecurityOrigin() | |
73 ->CanAccessDatabase()) { | |
74 exception_state.ThrowSecurityError( | |
75 "access to the Indexed Database API is denied in this context."); | |
76 return nullptr; | |
77 } | |
78 | |
79 IDBRequest* request = | 67 IDBRequest* request = |
80 IDBRequest::Create(script_state, IDBAny::CreateNull(), nullptr); | 68 IDBRequest::Create(script_state, IDBAny::CreateNull(), nullptr); |
81 | |
82 if (!IndexedDBClient::From(ExecutionContext::From(script_state)) | |
83 ->AllowIndexedDB(ExecutionContext::From(script_state), | |
84 "Database Listing")) { | |
85 request->EnqueueResponse( | |
86 DOMException::Create(kUnknownError, kPermissionDeniedErrorMessage)); | |
87 return request; | |
88 } | |
89 | |
90 Platform::Current()->IdbFactory()->GetDatabaseNames( | 69 Platform::Current()->IdbFactory()->GetDatabaseNames( |
91 request->CreateWebCallbacks().release(), | 70 request->CreateWebCallbacks().release(), |
92 WebSecurityOrigin( | 71 WebSecurityOrigin( |
93 ExecutionContext::From(script_state)->GetSecurityOrigin())); | 72 ExecutionContext::From(script_state)->GetSecurityOrigin())); |
94 return request; | 73 return request; |
95 } | 74 } |
96 | 75 |
97 IDBOpenDBRequest* IDBFactory::open(ScriptState* script_state, | 76 IDBOpenDBRequest* IDBFactory::open(ScriptState* script_state, |
98 const String& name, | 77 const String& name, |
99 unsigned long long version, | 78 unsigned long long version, |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 const String& name, | 125 const String& name, |
147 ExceptionState& exception_state) { | 126 ExceptionState& exception_state) { |
148 IDB_TRACE("IDBFactory::open"); | 127 IDB_TRACE("IDBFactory::open"); |
149 return OpenInternal(script_state, name, IDBDatabaseMetadata::kNoVersion, | 128 return OpenInternal(script_state, name, IDBDatabaseMetadata::kNoVersion, |
150 exception_state); | 129 exception_state); |
151 } | 130 } |
152 | 131 |
153 IDBOpenDBRequest* IDBFactory::deleteDatabase(ScriptState* script_state, | 132 IDBOpenDBRequest* IDBFactory::deleteDatabase(ScriptState* script_state, |
154 const String& name, | 133 const String& name, |
155 ExceptionState& exception_state) { | 134 ExceptionState& exception_state) { |
156 return DeleteDatabaseInternal(script_state, name, exception_state, | |
157 /*force_close=*/false); | |
158 } | |
159 | |
160 IDBOpenDBRequest* IDBFactory::CloseConnectionsAndDeleteDatabase( | |
161 ScriptState* script_state, | |
162 const String& name, | |
163 ExceptionState& exception_state) { | |
164 return DeleteDatabaseInternal(script_state, name, exception_state, | |
165 /*force_close=*/true); | |
166 } | |
167 | |
168 IDBOpenDBRequest* IDBFactory::DeleteDatabaseInternal( | |
169 ScriptState* script_state, | |
170 const String& name, | |
171 ExceptionState& exception_state, | |
172 bool force_close) { | |
173 IDB_TRACE("IDBFactory::deleteDatabase"); | 135 IDB_TRACE("IDBFactory::deleteDatabase"); |
174 IDBDatabase::RecordApiCallsHistogram(kIDBDeleteDatabaseCall); | 136 IDBDatabase::RecordApiCallsHistogram(kIDBDeleteDatabaseCall); |
175 if (!IsContextValid(ExecutionContext::From(script_state))) | 137 if (!IsContextValid(ExecutionContext::From(script_state))) |
176 return nullptr; | 138 return nullptr; |
177 if (!ExecutionContext::From(script_state) | 139 if (!ExecutionContext::From(script_state) |
178 ->GetSecurityOrigin() | 140 ->GetSecurityOrigin() |
179 ->CanAccessDatabase()) { | 141 ->CanAccessDatabase()) { |
180 exception_state.ThrowSecurityError( | 142 exception_state.ThrowSecurityError( |
181 "access to the Indexed Database API is denied in this context."); | 143 "access to the Indexed Database API is denied in this context."); |
182 return nullptr; | 144 return nullptr; |
183 } | 145 } |
184 | 146 |
| 147 return DeleteDatabaseInternal(script_state, name, /*force_close=*/false); |
| 148 } |
| 149 |
| 150 IDBOpenDBRequest* IDBFactory::CloseConnectionsAndDeleteDatabase( |
| 151 ScriptState* script_state, |
| 152 const String& name) { |
| 153 return DeleteDatabaseInternal(script_state, name, /*force_close=*/true); |
| 154 } |
| 155 |
| 156 IDBOpenDBRequest* IDBFactory::DeleteDatabaseInternal(ScriptState* script_state, |
| 157 const String& name, |
| 158 bool force_close) { |
185 IDBOpenDBRequest* request = IDBOpenDBRequest::Create( | 159 IDBOpenDBRequest* request = IDBOpenDBRequest::Create( |
186 script_state, nullptr, 0, IDBDatabaseMetadata::kDefaultVersion); | 160 script_state, nullptr, 0, IDBDatabaseMetadata::kDefaultVersion); |
187 | 161 |
188 if (!IndexedDBClient::From(ExecutionContext::From(script_state)) | 162 if (!IndexedDBClient::From(ExecutionContext::From(script_state)) |
189 ->AllowIndexedDB(ExecutionContext::From(script_state), name)) { | 163 ->AllowIndexedDB(ExecutionContext::From(script_state), name)) { |
190 request->EnqueueResponse( | 164 request->EnqueueResponse( |
191 DOMException::Create(kUnknownError, kPermissionDeniedErrorMessage)); | 165 DOMException::Create(kUnknownError, kPermissionDeniedErrorMessage)); |
192 return request; | 166 return request; |
193 } | 167 } |
194 | 168 |
(...skipping 28 matching lines...) Expand all Loading... |
223 if (!second->IsValid()) { | 197 if (!second->IsValid()) { |
224 exception_state.ThrowDOMException(kDataError, | 198 exception_state.ThrowDOMException(kDataError, |
225 IDBDatabase::kNotValidKeyErrorMessage); | 199 IDBDatabase::kNotValidKeyErrorMessage); |
226 return 0; | 200 return 0; |
227 } | 201 } |
228 | 202 |
229 return static_cast<short>(first->Compare(second)); | 203 return static_cast<short>(first->Compare(second)); |
230 } | 204 } |
231 | 205 |
232 } // namespace blink | 206 } // namespace blink |
OLD | NEW |