| Index: chrome/renderer/renderer_web_database_observer.cc
|
| ===================================================================
|
| --- chrome/renderer/renderer_web_database_observer.cc (revision 38290)
|
| +++ chrome/renderer/renderer_web_database_observer.cc (working copy)
|
| @@ -4,19 +4,26 @@
|
|
|
| #include "chrome/renderer/renderer_web_database_observer.h"
|
|
|
| +#include "base/auto_reset.h"
|
| +#include "base/message_loop.h"
|
| +#include "base/string16.h"
|
| #include "chrome/common/render_messages.h"
|
| #include "third_party/WebKit/WebKit/chromium/public/WebDatabase.h"
|
|
|
| RendererWebDatabaseObserver::RendererWebDatabaseObserver(
|
| IPC::Message::Sender* sender)
|
| - : sender_(sender) {
|
| + : sender_(sender),
|
| + waiting_for_dbs_to_close_(false) {
|
| }
|
|
|
| void RendererWebDatabaseObserver::databaseOpened(
|
| const WebKit::WebDatabase& database) {
|
| + string16 origin_identifier = database.securityOrigin().databaseIdentifier();
|
| + string16 database_name = database.name();
|
| sender_->Send(new ViewHostMsg_DatabaseOpened(
|
| - database.securityOrigin().databaseIdentifier(), database.name(),
|
| + origin_identifier, database_name,
|
| database.displayName(), database.estimatedSize()));
|
| + database_connections_.AddConnection(origin_identifier, database_name);
|
| }
|
|
|
| void RendererWebDatabaseObserver::databaseModified(
|
| @@ -27,6 +34,19 @@
|
|
|
| void RendererWebDatabaseObserver::databaseClosed(
|
| const WebKit::WebDatabase& database) {
|
| + string16 origin_identifier = database.securityOrigin().databaseIdentifier();
|
| + string16 database_name = database.name();
|
| sender_->Send(new ViewHostMsg_DatabaseClosed(
|
| - database.securityOrigin().databaseIdentifier(), database.name()));
|
| + origin_identifier, database_name));
|
| + database_connections_.RemoveConnection(origin_identifier, database_name);
|
| + if (waiting_for_dbs_to_close_ && database_connections_.IsEmpty())
|
| + MessageLoop::current()->Quit();
|
| }
|
| +
|
| +void RendererWebDatabaseObserver::WaitForAllDatabasesToClose() {
|
| + if (!database_connections_.IsEmpty()) {
|
| + AutoReset waiting_for_dbs_auto_reset(&waiting_for_dbs_to_close_, true);
|
| + MessageLoop::ScopedNestableTaskAllower nestable(MessageLoop::current());
|
| + MessageLoop::current()->Run();
|
| + }
|
| +}
|
|
|