#include "content/renderer/in_process_renderer_thread.h"
#include "build/build_config.h"
#include "content/public/common/content_client.h"
#include "content/public/renderer/content_renderer_client.h"
#include "content/renderer/render_process.h"
#include "content/renderer/render_process_impl.h"
#include "content/renderer/render_thread_impl.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h"
#if BUILDFLAG(IS_ANDROID)
#include "base/android/jni_android.h"
#endif
namespace content {
InProcessRendererThread::InProcessRendererThread(
const InProcessChildThreadParams& params,
int32_t renderer_client_id)
: Thread("Chrome_InProcRendererThread"),
params_(params),
renderer_client_id_(renderer_client_id) {}
InProcessRendererThread::~InProcessRendererThread() {
Stop();
}
void InProcessRendererThread::Init() {
content::ContentRendererClient* client = GetContentClient()->renderer();
if (client) {
client->PostSandboxInitialized();
}
#if BUILDFLAG(IS_ANDROID)
base::android::AttachCurrentThreadWithName(thread_name());
CHECK(!render_process_);
#endif
blink::Platform::InitializeBlink();
std::unique_ptr<blink::scheduler::WebThreadScheduler> main_thread_scheduler =
blink::scheduler::WebThreadScheduler::CreateMainThreadScheduler();
render_process_ = RenderProcessImpl::Create();
new RenderThreadImpl(params_, renderer_client_id_,
std::move(main_thread_scheduler));
}
void InProcessRendererThread::CleanUp() {
render_process_.reset();
SetThreadWasQuitProperly(true);
}
base::Thread* CreateInProcessRendererThread(
const InProcessChildThreadParams& params,
int32_t renderer_client_id) {
return new InProcessRendererThread(params, renderer_client_id);
}
}