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

Side by Side 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, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
2 // source code is governed by a BSD-style license that can be found in the 2 // source code is governed by a BSD-style license that can be found in the
3 // LICENSE file. 3 // LICENSE file.
4 4
5 #include "chrome/browser/in_process_webkit/webkit_context.h" 5 #include "chrome/browser/in_process_webkit/webkit_context.h"
6 6
7 #include "chrome/browser/chrome_thread.h" 7 #include "chrome/browser/chrome_thread.h"
8 8
9 WebKitContext::WebKitContext(const FilePath& data_path, bool is_incognito) 9 WebKitContext::WebKitContext(const FilePath& data_path, bool is_incognito)
10 : data_path_(data_path), 10 : data_path_(data_path),
11 is_incognito_(is_incognito), 11 is_incognito_(is_incognito),
12 ALLOW_THIS_IN_INITIALIZER_LIST( 12 ALLOW_THIS_IN_INITIALIZER_LIST(
13 dom_storage_context_(new DOMStorageContext(this))) { 13 dom_storage_context_(new DOMStorageContext(this))) {
14 } 14 }
15 15
16 WebKitContext::~WebKitContext() { 16 WebKitContext::~WebKitContext() {
17 // If the WebKit thread was ever spun up, delete the object there. If we're 17 // If the WebKit thread was ever spun up, delete the object there. The task
18 // on the IO thread, this is safe because the WebKit thread goes away after 18 // will just get deleted if the WebKit thread isn't created.
19 // the IO. If we're on the UI thread, we're safe because the UI thread kills 19 DOMStorageContext* dom_storage_context = dom_storage_context_.release();
20 // the WebKit thread. 20 if (!ChromeThread::DeleteSoon(
21 MessageLoop* webkit_loop = ChromeThread::GetMessageLoop(ChromeThread::WEBKIT); 21 ChromeThread::WEBKIT, FROM_HERE, dom_storage_context)) {
22 if (webkit_loop) 22 // The WebKit thread wasn't created, and the task got deleted without
23 webkit_loop->DeleteSoon(FROM_HERE, dom_storage_context_.release()); 23 // freeing the DOMStorageContext, so delete it manually.
24 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
25 }
24 } 26 }
25 27
26 void WebKitContext::PurgeMemory() { 28 void WebKitContext::PurgeMemory() {
27 // DOMStorageContext::PurgeMemory() should only be called on the WebKit 29 // DOMStorageContext::PurgeMemory() should only be called on the WebKit
28 // thread. 30 // thread.
29 // 31 //
30 // Note that if there is no WebKit thread, then there's nothing in 32 // Note that if there is no WebKit thread, then there's nothing in
31 // LocalStorage and it's OK to no-op here. Further note that in a unittest, 33 // LocalStorage and it's OK to no-op here.
32 // there may be no threads at all, in which case MessageLoop::current() will 34 if (ChromeThread::CurrentlyOn(ChromeThread::WEBKIT)) {
33 // also be NULL and we'll go ahead and call PurgeMemory() directly, which is
34 // probably what the test wants.
35 MessageLoop* webkit_loop = ChromeThread::GetMessageLoop(ChromeThread::WEBKIT);
36 if (MessageLoop::current() == webkit_loop) {
37 dom_storage_context_->PurgeMemory(); 35 dom_storage_context_->PurgeMemory();
38 } else if (webkit_loop) { 36 } else {
39 // Since we're not on the WebKit thread, proxy the call over to it. We 37 // Since we're not on the WebKit thread, proxy the call over to it. We
40 // can't post a task to call DOMStorageContext::PurgeMemory() directly 38 // can't post a task to call DOMStorageContext::PurgeMemory() directly
41 // because that class is not refcounted. 39 // because that class is not refcounted.
42 webkit_loop->PostTask(FROM_HERE, 40 ChromeThread::PostTask(
43 NewRunnableMethod(this, &WebKitContext::PurgeMemory)); 41 ChromeThread::WEBKIT, FROM_HERE,
42 NewRunnableMethod(this, &WebKitContext::PurgeMemory));
44 } 43 }
45 } 44 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698