15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/render_process_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <objidl.h> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <mlang.h> 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/sys_info.h" 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/child/site_isolation_policy.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/content_renderer_client.h" 22bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "third_party/WebKit/public/web/WebFrame.h" 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "v8/include/v8.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderProcessImpl::RenderProcessImpl() 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : enabled_bindings_(0) { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HACK: See http://b/issue?id=1024307 for rationale. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetModuleHandle(L"LPK.DLL") == NULL) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Makes sure lpk.dll is loaded by gdi32 to make sure ExtTextOut() works 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when buffering into a EMF buffer for printing. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef BOOL (__stdcall *GdiInitializeLanguagePack)(int LoadedShapingDLLs); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GdiInitializeLanguagePack gdi_init_lpk = 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reinterpret_cast<GdiInitializeLanguagePack>(GetProcAddress( 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetModuleHandle(L"GDI32.DLL"), 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "GdiInitializeLanguagePack")); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(gdi_init_lpk); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (gdi_init_lpk) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gdi_init_lpk(0); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (base::SysInfo::IsLowEndDevice()) { 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string optimize_flag("--optimize-for-size"); 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) v8::V8::SetFlagsFromString(optimize_flag.c_str(), 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<int>(optimize_flag.size())); 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command_line.HasSwitch(switches::kJavaScriptFlags)) { 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string flags( 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line.GetSwitchValueASCII(switches::kJavaScriptFlags)); 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) v8::V8::SetFlagsFromString(flags.c_str(), static_cast<int>(flags.size())); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Turn on cross-site document blocking for renderer processes. 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SiteIsolationPolicy::SetPolicyEnabled( 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetContentClient()->renderer()->ShouldEnableSiteIsolationPolicy()); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderProcessImpl::~RenderProcessImpl() { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int count = blink::WebFrame::instanceCount(); 67bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch if (count) 68bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch DLOG(ERROR) << "WebFrame LEAKED " << count << " TIMES"; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetShutDownEvent()->Signal(); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderProcessImpl::AddBindings(int bindings) { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_bindings_ |= bindings; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int RenderProcessImpl::GetEnabledBindings() const { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enabled_bindings_; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 83