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

Unified Diff: chrome/browser/android/process_utils.cc

Issue 10816038: Upstreaming RegisterProcessUtils() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 8 years, 4 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/browser/android/chrome_jni_registrar.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/android/process_utils.cc
diff --git a/chrome/browser/android/process_utils.cc b/chrome/browser/android/process_utils.cc
index c0f52802273241fca6752799da785159567790df..e5cff54ad8d0efb6d9837dfb05e383ebb1434bb8 100644
--- a/chrome/browser/android/process_utils.cc
+++ b/chrome/browser/android/process_utils.cc
@@ -8,12 +8,37 @@
#include "base/lazy_instance.h"
#include "base/logging.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/common/render_messages.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_process_host.h"
#include "jni/ProcessUtils_jni.h"
+#include "net/http/http_network_session.h"
+#include "net/http/http_transaction_factory.h"
+#include "net/url_request/url_request_context.h"
+#include "net/url_request/url_request_context_getter.h"
namespace {
+void CloseIdleConnectionsForProfile(
+ scoped_refptr<net::URLRequestContextGetter> context_getter) {
+ DCHECK(context_getter.get());
+ if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)) {
+ content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
+ base::Bind(&CloseIdleConnectionsForProfile,
+ context_getter));
+ return;
+ }
+
+ net::URLRequestContext* context = context_getter->GetURLRequestContext();
+ DCHECK(context->http_transaction_factory());
+ net::HttpNetworkSession* session =
+ context->http_transaction_factory()->GetSession();
+ DCHECK(session);
Philippe 2012/12/03 13:17:46 Are we missing 'session->CloseIdleConnections()' h
digit1 2012/12/03 13:42:02 Yes, this looks suspicious. What happens if you ad
Philippe 2012/12/03 13:48:37 Yes, I'm building/testing this right now. FYI, we
+}
+
// Only accessed from the JNI thread by ToggleWebKitSharedTimers() which is
// implemented below.
base::LazyInstance<std::vector<int /* process id */> > g_suspended_processes =
@@ -54,7 +79,23 @@ static void ToggleWebKitSharedTimers(JNIEnv* env,
}
}
-// TODO(pliard): http://crbug.com/137674
+static void CloseIdleConnections(JNIEnv* env, jclass obj) {
+ // Iterate through all loaded profiles (and their associated incognito
+ // profiles if created), and close the idle connections associated with each
+ // one.
+ std::vector<Profile*> profiles(
+ g_browser_process->profile_manager()->GetLoadedProfiles());
+ for (std::vector<Profile*>::iterator i = profiles.begin();
+ i != profiles.end(); i++) {
+ Profile* profile = *i;
+ CloseIdleConnectionsForProfile(profile->GetRequestContext());
+ if (profile->HasOffTheRecordProfile()) {
+ CloseIdleConnectionsForProfile(
+ profile->GetOffTheRecordProfile()->GetRequestContext());
+ }
+ }
+}
+
bool RegisterProcessUtils(JNIEnv* env) {
return RegisterNativesImpl(env);
}
« no previous file with comments | « chrome/browser/android/chrome_jni_registrar.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698