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

Side by Side Diff: Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp

Issue 10536007: Merge 117978 - IndexedDB: Fire error when there are problems opening a DB (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1132/
Patch Set: Created 8 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) 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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 : m_version(version) 86 : m_version(version)
87 , m_callbacks(callbacks) 87 , m_callbacks(callbacks)
88 , m_databaseCallbacks(databaseCallbacks) 88 , m_databaseCallbacks(databaseCallbacks)
89 { 89 {
90 } 90 }
91 String m_version; 91 String m_version;
92 RefPtr<IDBCallbacks> m_callbacks; 92 RefPtr<IDBCallbacks> m_callbacks;
93 RefPtr<IDBDatabaseCallbacks> m_databaseCallbacks; 93 RefPtr<IDBDatabaseCallbacks> m_databaseCallbacks;
94 }; 94 };
95 95
96 PassRefPtr<IDBDatabaseBackendImpl> IDBDatabaseBackendImpl::create(const String& name, IDBBackingStore* database, IDBTransactionCoordinator* coordinator, IDBFact oryBackendImpl* factory, const String& uniqueIdentifier)
97 {
98 RefPtr<IDBDatabaseBackendImpl> backend = adoptRef(new IDBDatabaseBackendImpl (name, database, coordinator, factory, uniqueIdentifier));
99 if (!backend->openInternal())
100 return 0;
101 return backend.release();
102 }
103
96 IDBDatabaseBackendImpl::IDBDatabaseBackendImpl(const String& name, IDBBackingSto re* backingStore, IDBTransactionCoordinator* coordinator, IDBFactoryBackendImpl* factory, const String& uniqueIdentifier) 104 IDBDatabaseBackendImpl::IDBDatabaseBackendImpl(const String& name, IDBBackingSto re* backingStore, IDBTransactionCoordinator* coordinator, IDBFactoryBackendImpl* factory, const String& uniqueIdentifier)
97 : m_backingStore(backingStore) 105 : m_backingStore(backingStore)
98 , m_id(InvalidId) 106 , m_id(InvalidId)
99 , m_name(name) 107 , m_name(name)
100 , m_version("") 108 , m_version("")
101 , m_identifier(uniqueIdentifier) 109 , m_identifier(uniqueIdentifier)
102 , m_factory(factory) 110 , m_factory(factory)
103 , m_transactionCoordinator(coordinator) 111 , m_transactionCoordinator(coordinator)
104 { 112 {
105 ASSERT(!m_name.isNull()); 113 ASSERT(!m_name.isNull());
106 openInternal();
107 } 114 }
108 115
109 void IDBDatabaseBackendImpl::openInternal() 116 bool IDBDatabaseBackendImpl::openInternal()
110 { 117 {
111 bool success = m_backingStore->getIDBDatabaseMetaData(m_name, m_version, m_i d); 118 bool success = m_backingStore->getIDBDatabaseMetaData(m_name, m_version, m_i d);
112 ASSERT(success == (m_id != InvalidId)); 119 ASSERT(success == (m_id != InvalidId));
113 if (success) { 120 if (success) {
114 loadObjectStores(); 121 loadObjectStores();
115 return; 122 return true;
116 } 123 }
117 if (!m_backingStore->createIDBDatabaseMetaData(m_name, m_version, m_id)) 124 return m_backingStore->createIDBDatabaseMetaData(m_name, m_version, m_id);
118 ASSERT_NOT_REACHED(); // FIXME: Need better error handling.
119 } 125 }
120 126
121 IDBDatabaseBackendImpl::~IDBDatabaseBackendImpl() 127 IDBDatabaseBackendImpl::~IDBDatabaseBackendImpl()
122 { 128 {
123 m_factory->removeIDBDatabaseBackend(m_identifier); 129 m_factory->removeIDBDatabaseBackend(m_identifier);
124 } 130 }
125 131
126 PassRefPtr<IDBBackingStore> IDBDatabaseBackendImpl::backingStore() const 132 PassRefPtr<IDBBackingStore> IDBDatabaseBackendImpl::backingStore() const
127 { 133 {
128 return m_backingStore; 134 return m_backingStore;
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 void IDBDatabaseBackendImpl::open(PassRefPtr<IDBDatabaseCallbacks> callbacks) 324 void IDBDatabaseBackendImpl::open(PassRefPtr<IDBDatabaseCallbacks> callbacks)
319 { 325 {
320 m_databaseCallbacksSet.add(RefPtr<IDBDatabaseCallbacks>(callbacks)); 326 m_databaseCallbacksSet.add(RefPtr<IDBDatabaseCallbacks>(callbacks));
321 } 327 }
322 328
323 void IDBDatabaseBackendImpl::openConnection(PassRefPtr<IDBCallbacks> callbacks) 329 void IDBDatabaseBackendImpl::openConnection(PassRefPtr<IDBCallbacks> callbacks)
324 { 330 {
325 if (!m_pendingDeleteCalls.isEmpty() || m_runningVersionChangeTransaction || !m_pendingSetVersionCalls.isEmpty()) 331 if (!m_pendingDeleteCalls.isEmpty() || m_runningVersionChangeTransaction || !m_pendingSetVersionCalls.isEmpty())
326 m_pendingOpenCalls.append(PendingOpenCall::create(callbacks)); 332 m_pendingOpenCalls.append(PendingOpenCall::create(callbacks));
327 else { 333 else {
328 if (m_id == InvalidId) 334 if (m_id == InvalidId && !openInternal())
329 openInternal(); 335 callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UN KNOWN_ERR, "Internal error."));
330 callbacks->onSuccess(this); 336 else
337 callbacks->onSuccess(this);
331 } 338 }
332 } 339 }
333 340
334 void IDBDatabaseBackendImpl::deleteDatabase(PassRefPtr<IDBCallbacks> prpCallback s) 341 void IDBDatabaseBackendImpl::deleteDatabase(PassRefPtr<IDBCallbacks> prpCallback s)
335 { 342 {
336 if (m_runningVersionChangeTransaction || !m_pendingSetVersionCalls.isEmpty() ) { 343 if (m_runningVersionChangeTransaction || !m_pendingSetVersionCalls.isEmpty() ) {
337 m_pendingDeleteCalls.append(PendingDeleteCall::create(prpCallbacks)); 344 m_pendingDeleteCalls.append(PendingDeleteCall::create(prpCallbacks));
338 return; 345 return;
339 } 346 }
340 RefPtr<IDBCallbacks> callbacks = prpCallbacks; 347 RefPtr<IDBCallbacks> callbacks = prpCallbacks;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 410
404 void IDBDatabaseBackendImpl::resetVersion(ScriptExecutionContext*, PassRefPtr<ID BDatabaseBackendImpl> database, const String& version) 411 void IDBDatabaseBackendImpl::resetVersion(ScriptExecutionContext*, PassRefPtr<ID BDatabaseBackendImpl> database, const String& version)
405 { 412 {
406 database->m_version = version; 413 database->m_version = version;
407 } 414 }
408 415
409 416
410 } // namespace WebCore 417 } // namespace WebCore
411 418
412 #endif // ENABLE(INDEXED_DATABASE) 419 #endif // ENABLE(INDEXED_DATABASE)
OLDNEW
« no previous file with comments | « Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h ('k') | Source/WebCore/Modules/indexeddb/IDBFactoryBackendImpl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698