OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <jni.h> | 5 #include <jni.h> |
6 #include <vector> | 6 #include <vector> |
7 | 7 |
8 #include "base/android/jni_android.h" | 8 #include "base/android/jni_android.h" |
9 #include "base/android/jni_string.h" | 9 #include "base/android/jni_string.h" |
10 #include "base/android/scoped_java_ref.h" | 10 #include "base/android/scoped_java_ref.h" |
(...skipping 26 matching lines...) Expand all Loading... |
37 // Note that this class is only accessed from the UI thread. | 37 // Note that this class is only accessed from the UI thread. |
38 class SuspendedProcessWatcher : public content::RenderProcessHostObserver { | 38 class SuspendedProcessWatcher : public content::RenderProcessHostObserver { |
39 public: | 39 public: |
40 | 40 |
41 // If the process crashes, stop watching the corresponding RenderProcessHost | 41 // If the process crashes, stop watching the corresponding RenderProcessHost |
42 // and ensure it doesn't get over-resumed. | 42 // and ensure it doesn't get over-resumed. |
43 virtual void RenderProcessExited(content::RenderProcessHost* host, | 43 virtual void RenderProcessExited(content::RenderProcessHost* host, |
44 base::ProcessHandle handle, | 44 base::ProcessHandle handle, |
45 base::TerminationStatus status, | 45 base::TerminationStatus status, |
46 int exit_code) OVERRIDE { | 46 int exit_code) OVERRIDE { |
47 std::vector<int>::iterator pos = std::find(suspended_processes_.begin(), | 47 StopWatching(host); |
48 suspended_processes_.end(), | 48 } |
49 host->GetID()); | 49 |
50 DCHECK_NE(pos, suspended_processes_.end()); | 50 virtual void RenderProcessHostDestroyed( |
51 host->RemoveObserver(this); | 51 content::RenderProcessHost* host) OVERRIDE { |
52 suspended_processes_.erase(pos); | 52 StopWatching(host); |
53 } | 53 } |
54 | 54 |
55 // Suspends timers in all current render processes. | 55 // Suspends timers in all current render processes. |
56 void SuspendWebKitSharedTimers() { | 56 void SuspendWebKitSharedTimers() { |
57 DCHECK(suspended_processes_.empty()); | 57 DCHECK(suspended_processes_.empty()); |
58 | 58 |
59 for (content::RenderProcessHost::iterator i( | 59 for (content::RenderProcessHost::iterator i( |
60 content::RenderProcessHost::AllHostsIterator()); | 60 content::RenderProcessHost::AllHostsIterator()); |
61 !i.IsAtEnd(); i.Advance()) { | 61 !i.IsAtEnd(); i.Advance()) { |
62 content::RenderProcessHost* host = i.GetCurrentValue(); | 62 content::RenderProcessHost* host = i.GetCurrentValue(); |
(...skipping 12 matching lines...) Expand all Loading... |
75 content::RenderProcessHost* host = | 75 content::RenderProcessHost* host = |
76 content::RenderProcessHost::FromID(*it); | 76 content::RenderProcessHost::FromID(*it); |
77 DCHECK(host); | 77 DCHECK(host); |
78 host->RemoveObserver(this); | 78 host->RemoveObserver(this); |
79 host->Send(new ViewMsg_SetWebKitSharedTimersSuspended(false)); | 79 host->Send(new ViewMsg_SetWebKitSharedTimersSuspended(false)); |
80 } | 80 } |
81 suspended_processes_.clear(); | 81 suspended_processes_.clear(); |
82 } | 82 } |
83 | 83 |
84 private: | 84 private: |
| 85 void StopWatching(content::RenderProcessHost* host) { |
| 86 std::vector<int>::iterator pos = std::find(suspended_processes_.begin(), |
| 87 suspended_processes_.end(), |
| 88 host->GetID()); |
| 89 DCHECK_NE(pos, suspended_processes_.end()); |
| 90 host->RemoveObserver(this); |
| 91 suspended_processes_.erase(pos); |
| 92 } |
| 93 |
85 std::vector<int /* RenderProcessHost id */> suspended_processes_; | 94 std::vector<int /* RenderProcessHost id */> suspended_processes_; |
86 }; | 95 }; |
87 | 96 |
88 base::LazyInstance<SuspendedProcessWatcher> g_suspended_processes_watcher = | 97 base::LazyInstance<SuspendedProcessWatcher> g_suspended_processes_watcher = |
89 LAZY_INSTANCE_INITIALIZER; | 98 LAZY_INSTANCE_INITIALIZER; |
90 | 99 |
91 } // namespace | 100 } // namespace |
92 | 101 |
93 // Returns the first substring consisting of the address of a physical location. | 102 // Returns the first substring consisting of the address of a physical location. |
94 static jstring FindAddress(JNIEnv* env, jclass clazz, jstring addr) { | 103 static jstring FindAddress(JNIEnv* env, jclass clazz, jstring addr) { |
(...skipping 14 matching lines...) Expand all Loading... |
109 } | 118 } |
110 } | 119 } |
111 | 120 |
112 namespace content { | 121 namespace content { |
113 | 122 |
114 bool RegisterWebViewStatics(JNIEnv* env) { | 123 bool RegisterWebViewStatics(JNIEnv* env) { |
115 return RegisterNativesImpl(env); | 124 return RegisterNativesImpl(env); |
116 } | 125 } |
117 | 126 |
118 } // namespace content | 127 } // namespace content |
OLD | NEW |