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

Unified Diff: chrome/renderer/renderer_web_database_observer.cc

Issue 573044: Merge 37594 - Wait for the DB thread to finish posting tasks to the main thre... (Closed) Base URL: svn://svn.chromium.org/chrome/branches/307/src/
Patch Set: Created 10 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/renderer_web_database_observer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
+ }
+}
« no previous file with comments | « chrome/renderer/renderer_web_database_observer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698