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 3 // found in the LICENSE file. 4 5 #include "content/renderer/render_process_impl.h" 6 7 #include "build/build_config.h" 8 9 #if defined(OS_WIN) 10 #include <windows.h> 11 #include <objidl.h> 12 #include <mlang.h> 13 #endif 14 15 #include "base/basictypes.h" 16 #include "base/command_line.h" 17 #include "base/compiler_specific.h" 18 #include "content/child/site_isolation_policy.h" 19 #include "content/public/common/content_switches.h" 20 #include "content/public/renderer/content_renderer_client.h" 21 #include "third_party/WebKit/public/web/WebFrame.h" 22 #include "v8/include/v8.h" 23 24 #if defined(OS_ANDROID) 25 #include "base/android/sys_utils.h" 26 #endif 27 28 namespace content { 29 RenderProcessImpl()30RenderProcessImpl::RenderProcessImpl() 31 : enabled_bindings_(0) { 32 #if defined(OS_WIN) 33 // HACK: See http://b/issue?id=1024307 for rationale. 34 if (GetModuleHandle(L"LPK.DLL") == NULL) { 35 // Makes sure lpk.dll is loaded by gdi32 to make sure ExtTextOut() works 36 // when buffering into a EMF buffer for printing. 37 typedef BOOL (__stdcall *GdiInitializeLanguagePack)(int LoadedShapingDLLs); 38 GdiInitializeLanguagePack gdi_init_lpk = 39 reinterpret_cast<GdiInitializeLanguagePack>(GetProcAddress( 40 GetModuleHandle(L"GDI32.DLL"), 41 "GdiInitializeLanguagePack")); 42 DCHECK(gdi_init_lpk); 43 if (gdi_init_lpk) { 44 gdi_init_lpk(0); 45 } 46 } 47 #endif 48 49 #if defined(OS_ANDROID) 50 if (base::android::SysUtils::IsLowEndDevice()) { 51 std::string optimize_flag("--optimize-for-size"); 52 v8::V8::SetFlagsFromString(optimize_flag.c_str(), 53 static_cast<int>(optimize_flag.size())); 54 } 55 #endif 56 57 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 58 if (command_line.HasSwitch(switches::kJavaScriptFlags)) { 59 std::string flags( 60 command_line.GetSwitchValueASCII(switches::kJavaScriptFlags)); 61 v8::V8::SetFlagsFromString(flags.c_str(), static_cast<int>(flags.size())); 62 } 63 64 // Turn on cross-site document blocking for renderer processes. 65 SiteIsolationPolicy::SetPolicyEnabled( 66 GetContentClient()->renderer()->ShouldEnableSiteIsolationPolicy()); 67 } 68 ~RenderProcessImpl()69RenderProcessImpl::~RenderProcessImpl() { 70 #ifndef NDEBUG 71 int count = blink::WebFrame::instanceCount(); 72 if (count) 73 DLOG(ERROR) << "WebFrame LEAKED " << count << " TIMES"; 74 #endif 75 76 GetShutDownEvent()->Signal(); 77 } 78 AddBindings(int bindings)79void RenderProcessImpl::AddBindings(int bindings) { 80 enabled_bindings_ |= bindings; 81 } 82 GetEnabledBindings() const83int RenderProcessImpl::GetEnabledBindings() const { 84 return enabled_bindings_; 85 } 86 87 } // namespace content 88