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

Unified Diff: chrome/browser/in_process_webkit/webkit_context.cc

Issue 306032: Simplify threading in browser thread by making only ChromeThread deal with di... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: a few more simplifications Created 11 years, 2 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
Index: chrome/browser/in_process_webkit/webkit_context.cc
===================================================================
--- chrome/browser/in_process_webkit/webkit_context.cc (revision 30037)
+++ chrome/browser/in_process_webkit/webkit_context.cc (working copy)
@@ -14,13 +14,15 @@
}
WebKitContext::~WebKitContext() {
- // If the WebKit thread was ever spun up, delete the object there. If we're
- // on the IO thread, this is safe because the WebKit thread goes away after
- // the IO. If we're on the UI thread, we're safe because the UI thread kills
- // the WebKit thread.
- MessageLoop* webkit_loop = ChromeThread::GetMessageLoop(ChromeThread::WEBKIT);
- if (webkit_loop)
- webkit_loop->DeleteSoon(FROM_HERE, dom_storage_context_.release());
+ // If the WebKit thread was ever spun up, delete the object there. The task
+ // will just get deleted if the WebKit thread isn't created.
+ DOMStorageContext* dom_storage_context = dom_storage_context_.release();
+ if (!ChromeThread::DeleteSoon(
+ ChromeThread::WEBKIT, FROM_HERE, dom_storage_context)) {
+ // The WebKit thread wasn't created, and the task got deleted without
+ // freeing the DOMStorageContext, so delete it manually.
+ delete dom_storage_context;
darin (slow to review) 2009/10/27 00:06:52 are you sure it is safe to delete this object here
jam 2009/10/27 02:38:18 This preserves the previous logic. If there's no
+ }
}
void WebKitContext::PurgeMemory() {
@@ -28,18 +30,15 @@
// thread.
//
// Note that if there is no WebKit thread, then there's nothing in
- // LocalStorage and it's OK to no-op here. Further note that in a unittest,
- // there may be no threads at all, in which case MessageLoop::current() will
- // also be NULL and we'll go ahead and call PurgeMemory() directly, which is
- // probably what the test wants.
- MessageLoop* webkit_loop = ChromeThread::GetMessageLoop(ChromeThread::WEBKIT);
- if (MessageLoop::current() == webkit_loop) {
+ // LocalStorage and it's OK to no-op here.
+ if (ChromeThread::CurrentlyOn(ChromeThread::WEBKIT)) {
dom_storage_context_->PurgeMemory();
- } else if (webkit_loop) {
+ } else {
// Since we're not on the WebKit thread, proxy the call over to it. We
// can't post a task to call DOMStorageContext::PurgeMemory() directly
// because that class is not refcounted.
- webkit_loop->PostTask(FROM_HERE,
- NewRunnableMethod(this, &WebKitContext::PurgeMemory));
+ ChromeThread::PostTask(
+ ChromeThread::WEBKIT, FROM_HERE,
+ NewRunnableMethod(this, &WebKitContext::PurgeMemory));
}
}

Powered by Google App Engine
This is Rietveld 408576698