| 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 "content/utility/utility_thread_impl.h" | 5 #include "content/utility/utility_thread_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/memory/scoped_vector.h" | 10 #include "base/memory/scoped_vector.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 dest->push_back(typename DEST::value_type(*i)); | 33 dest->push_back(typename DEST::value_type(*i)); |
| 34 } | 34 } |
| 35 | 35 |
| 36 } // namespace | 36 } // namespace |
| 37 | 37 |
| 38 UtilityThreadImpl::UtilityThreadImpl() : single_process_(false) { | 38 UtilityThreadImpl::UtilityThreadImpl() : single_process_(false) { |
| 39 Init(); | 39 Init(); |
| 40 } | 40 } |
| 41 | 41 |
| 42 UtilityThreadImpl::UtilityThreadImpl(const std::string& channel_name) | 42 UtilityThreadImpl::UtilityThreadImpl(const std::string& channel_name) |
| 43 : ChildThread(Options(channel_name, false)), | 43 : ChildThreadImpl(Options(channel_name, false)), |
| 44 single_process_(true) { | 44 single_process_(true) { |
| 45 Init(); | 45 Init(); |
| 46 } | 46 } |
| 47 | 47 |
| 48 UtilityThreadImpl::~UtilityThreadImpl() { | 48 UtilityThreadImpl::~UtilityThreadImpl() { |
| 49 } | 49 } |
| 50 | 50 |
| 51 void UtilityThreadImpl::Shutdown() { | 51 void UtilityThreadImpl::Shutdown() { |
| 52 ChildThread::Shutdown(); | 52 ChildThreadImpl::Shutdown(); |
| 53 | 53 |
| 54 if (!single_process_) | 54 if (!single_process_) |
| 55 blink::shutdown(); | 55 blink::shutdown(); |
| 56 } | 56 } |
| 57 | 57 |
| 58 bool UtilityThreadImpl::Send(IPC::Message* msg) { | |
| 59 return ChildThread::Send(msg); | |
| 60 } | |
| 61 | |
| 62 void UtilityThreadImpl::ReleaseProcessIfNeeded() { | 58 void UtilityThreadImpl::ReleaseProcessIfNeeded() { |
| 63 if (batch_mode_) | 59 if (batch_mode_) |
| 64 return; | 60 return; |
| 65 | 61 |
| 66 if (single_process_) { | 62 if (single_process_) { |
| 67 // Close the channel to cause UtilityProcessHostImpl to be deleted. We need | 63 // Close the channel to cause UtilityProcessHostImpl to be deleted. We need |
| 68 // to take a different code path than the multi-process case because that | 64 // to take a different code path than the multi-process case because that |
| 69 // depends on the child process going away to close the channel, but that | 65 // depends on the child process going away to close the channel, but that |
| 70 // can't happen when we're in single process mode. | 66 // can't happen when we're in single process mode. |
| 71 channel()->Close(); | 67 channel()->Close(); |
| 72 } else { | 68 } else { |
| 73 ChildProcess::current()->ReleaseProcess(); | 69 ChildProcess::current()->ReleaseProcess(); |
| 74 } | 70 } |
| 75 } | 71 } |
| 76 | 72 |
| 77 #if defined(OS_WIN) | |
| 78 | |
| 79 void UtilityThreadImpl::PreCacheFont(const LOGFONT& log_font) { | |
| 80 Send(new ChildProcessHostMsg_PreCacheFont(log_font)); | |
| 81 } | |
| 82 | |
| 83 void UtilityThreadImpl::ReleaseCachedFonts() { | |
| 84 Send(new ChildProcessHostMsg_ReleaseCachedFonts()); | |
| 85 } | |
| 86 | |
| 87 #endif // OS_WIN | |
| 88 | |
| 89 void UtilityThreadImpl::Init() { | 73 void UtilityThreadImpl::Init() { |
| 90 batch_mode_ = false; | 74 batch_mode_ = false; |
| 91 ChildProcess::current()->AddRefProcess(); | 75 ChildProcess::current()->AddRefProcess(); |
| 92 if (!single_process_) { | 76 if (!single_process_) { |
| 93 // We can only initialize WebKit on one thread, and in single process mode | 77 // We can only initialize WebKit on one thread, and in single process mode |
| 94 // we run the utility thread on separate thread. This means that if any code | 78 // we run the utility thread on separate thread. This means that if any code |
| 95 // needs WebKit initialized in the utility process, they need to have | 79 // needs WebKit initialized in the utility process, they need to have |
| 96 // another path to support single process mode. | 80 // another path to support single process mode. |
| 97 blink_platform_impl_.reset(new BlinkPlatformImpl); | 81 blink_platform_impl_.reset(new BlinkPlatformImpl); |
| 98 blink::initialize(blink_platform_impl_.get()); | 82 blink::initialize(blink_platform_impl_.get()); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 Send(new UtilityHostMsg_LoadPluginFailed(i, plugin_paths[i])); | 125 Send(new UtilityHostMsg_LoadPluginFailed(i, plugin_paths[i])); |
| 142 else | 126 else |
| 143 Send(new UtilityHostMsg_LoadedPlugin(i, plugin)); | 127 Send(new UtilityHostMsg_LoadedPlugin(i, plugin)); |
| 144 } | 128 } |
| 145 | 129 |
| 146 ReleaseProcessIfNeeded(); | 130 ReleaseProcessIfNeeded(); |
| 147 } | 131 } |
| 148 #endif | 132 #endif |
| 149 | 133 |
| 150 } // namespace content | 134 } // namespace content |
| OLD | NEW |