Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: pdf/pdf.cc

Issue 1419793008: Setup and tear down V8 if the PDF module is not managed via pepper (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "pdf/pdf.h" 5 #include "pdf/pdf.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #endif 9 #endif
10 10
(...skipping 14 matching lines...) Expand all
25 bool g_sdk_initialized_via_pepper = false; 25 bool g_sdk_initialized_via_pepper = false;
26 26
27 gin::IsolateHolder* g_isolate_holder = nullptr; 27 gin::IsolateHolder* g_isolate_holder = nullptr;
28 28
29 void TearDownV8() { 29 void TearDownV8() {
30 g_isolate_holder->isolate()->Exit(); 30 g_isolate_holder->isolate()->Exit();
31 delete g_isolate_holder; 31 delete g_isolate_holder;
32 g_isolate_holder = nullptr; 32 g_isolate_holder = nullptr;
33 } 33 }
34 34
35 void SetUpV8() {
36 g_isolate_holder =
37 new gin::IsolateHolder(gin::IsolateHolder::kSingleThread);
38 g_isolate_holder->isolate()->Enter();
39 }
40
35 } // namespace 41 } // namespace
36 42
37 PDFModule::PDFModule() { 43 PDFModule::PDFModule() {
38 } 44 }
39 45
40 PDFModule::~PDFModule() { 46 PDFModule::~PDFModule() {
41 if (g_sdk_initialized_via_pepper) { 47 if (g_sdk_initialized_via_pepper) {
42 TearDownV8(); 48 TearDownV8();
43 chrome_pdf::ShutdownSDK(); 49 chrome_pdf::ShutdownSDK();
44 g_sdk_initialized_via_pepper = false; 50 g_sdk_initialized_via_pepper = false;
(...skipping 10 matching lines...) Expand all
55 v8::StartupData snapshot; 61 v8::StartupData snapshot;
56 pp::PDF::GetV8ExternalSnapshotData(pp::InstanceHandle(instance), 62 pp::PDF::GetV8ExternalSnapshotData(pp::InstanceHandle(instance),
57 &natives.data, &natives.raw_size, 63 &natives.data, &natives.raw_size,
58 &snapshot.data, &snapshot.raw_size); 64 &snapshot.data, &snapshot.raw_size);
59 if (natives.data) { 65 if (natives.data) {
60 v8::V8::SetNativesDataBlob(&natives); 66 v8::V8::SetNativesDataBlob(&natives);
61 v8::V8::SetSnapshotDataBlob(&snapshot); 67 v8::V8::SetSnapshotDataBlob(&snapshot);
62 } 68 }
63 gin::IsolateHolder::Initialize(gin::IsolateHolder::kNonStrictMode, 69 gin::IsolateHolder::Initialize(gin::IsolateHolder::kNonStrictMode,
64 gin::ArrayBufferAllocator::SharedInstance()); 70 gin::ArrayBufferAllocator::SharedInstance());
65 g_isolate_holder = 71 SetUpV8();
66 new gin::IsolateHolder(gin::IsolateHolder::kSingleThread);
67 g_isolate_holder->isolate()->Enter();
68 if (!chrome_pdf::InitializeSDK()) { 72 if (!chrome_pdf::InitializeSDK()) {
Lei Zhang 2015/11/05 21:44:01 Should we write wrappers for chrome_pdf::Initializ
69 TearDownV8(); 73 TearDownV8();
70 return NULL; 74 return NULL;
71 } 75 }
72 g_sdk_initialized_via_pepper = true; 76 g_sdk_initialized_via_pepper = true;
73 } 77 }
74 78
75 return new OutOfProcessInstance(instance); 79 return new OutOfProcessInstance(instance);
76 } 80 }
77 81
78 82
(...skipping 30 matching lines...) Expand all
109 int bounds_origin_x, 113 int bounds_origin_x,
110 int bounds_origin_y, 114 int bounds_origin_y,
111 int bounds_width, 115 int bounds_width,
112 int bounds_height, 116 int bounds_height,
113 bool fit_to_bounds, 117 bool fit_to_bounds,
114 bool stretch_to_bounds, 118 bool stretch_to_bounds,
115 bool keep_aspect_ratio, 119 bool keep_aspect_ratio,
116 bool center_in_bounds, 120 bool center_in_bounds,
117 bool autorotate) { 121 bool autorotate) {
118 if (!g_sdk_initialized_via_pepper) { 122 if (!g_sdk_initialized_via_pepper) {
123 SetUpV8();
119 if (!chrome_pdf::InitializeSDK()) { 124 if (!chrome_pdf::InitializeSDK()) {
125 TearDownV8();
120 return false; 126 return false;
121 } 127 }
122 } 128 }
123 scoped_ptr<chrome_pdf::PDFEngineExports> engine_exports( 129 scoped_ptr<chrome_pdf::PDFEngineExports> engine_exports(
124 chrome_pdf::PDFEngineExports::Create()); 130 chrome_pdf::PDFEngineExports::Create());
125 chrome_pdf::PDFEngineExports::RenderingSettings settings( 131 chrome_pdf::PDFEngineExports::RenderingSettings settings(
126 dpi, dpi, pp::Rect(bounds_origin_x, bounds_origin_y, bounds_width, 132 dpi, dpi, pp::Rect(bounds_origin_x, bounds_origin_y, bounds_width,
127 bounds_height), 133 bounds_height),
128 fit_to_bounds, stretch_to_bounds, keep_aspect_ratio, center_in_bounds, 134 fit_to_bounds, stretch_to_bounds, keep_aspect_ratio, center_in_bounds,
129 autorotate); 135 autorotate);
130 bool ret = engine_exports->RenderPDFPageToDC(pdf_buffer, buffer_size, 136 bool ret = engine_exports->RenderPDFPageToDC(pdf_buffer, buffer_size,
131 page_number, settings, dc); 137 page_number, settings, dc);
132 if (!g_sdk_initialized_via_pepper) { 138 if (!g_sdk_initialized_via_pepper) {
139 TearDownV8();
133 chrome_pdf::ShutdownSDK(); 140 chrome_pdf::ShutdownSDK();
134 } 141 }
135 return ret; 142 return ret;
136 } 143 }
137 144
138 #endif // OS_WIN 145 #endif // OS_WIN
139 146
140 bool GetPDFDocInfo(const void* pdf_buffer, 147 bool GetPDFDocInfo(const void* pdf_buffer,
141 int buffer_size, int* page_count, 148 int buffer_size, int* page_count,
142 double* max_page_width) { 149 double* max_page_width) {
143 if (!g_sdk_initialized_via_pepper) { 150 if (!g_sdk_initialized_via_pepper) {
144 if (!chrome_pdf::InitializeSDK()) 151 SetUpV8();
152 if (!chrome_pdf::InitializeSDK()) {
153 TearDownV8();
145 return false; 154 return false;
155 }
146 } 156 }
147 scoped_ptr<chrome_pdf::PDFEngineExports> engine_exports( 157 scoped_ptr<chrome_pdf::PDFEngineExports> engine_exports(
148 chrome_pdf::PDFEngineExports::Create()); 158 chrome_pdf::PDFEngineExports::Create());
149 bool ret = engine_exports->GetPDFDocInfo( 159 bool ret = engine_exports->GetPDFDocInfo(
150 pdf_buffer, buffer_size, page_count, max_page_width); 160 pdf_buffer, buffer_size, page_count, max_page_width);
151 if (!g_sdk_initialized_via_pepper) { 161 if (!g_sdk_initialized_via_pepper) {
162 TearDownV8();
152 chrome_pdf::ShutdownSDK(); 163 chrome_pdf::ShutdownSDK();
153 } 164 }
154 return ret; 165 return ret;
155 } 166 }
156 167
157 bool GetPDFPageSizeByIndex(const void* pdf_buffer, 168 bool GetPDFPageSizeByIndex(const void* pdf_buffer,
158 int pdf_buffer_size, int page_number, 169 int pdf_buffer_size, int page_number,
159 double* width, double* height) { 170 double* width, double* height) {
160 if (!g_sdk_initialized_via_pepper) { 171 if (!g_sdk_initialized_via_pepper) {
161 if (!chrome_pdf::InitializeSDK()) 172 SetUpV8();
173 if (!chrome_pdf::InitializeSDK()) {
174 TearDownV8();
162 return false; 175 return false;
176 }
163 } 177 }
164 scoped_ptr<chrome_pdf::PDFEngineExports> engine_exports( 178 scoped_ptr<chrome_pdf::PDFEngineExports> engine_exports(
165 chrome_pdf::PDFEngineExports::Create()); 179 chrome_pdf::PDFEngineExports::Create());
166 bool ret = engine_exports->GetPDFPageSizeByIndex( 180 bool ret = engine_exports->GetPDFPageSizeByIndex(
167 pdf_buffer, pdf_buffer_size, page_number, width, height); 181 pdf_buffer, pdf_buffer_size, page_number, width, height);
168 if (!g_sdk_initialized_via_pepper) 182 if (!g_sdk_initialized_via_pepper) {
183 TearDownV8();
169 chrome_pdf::ShutdownSDK(); 184 chrome_pdf::ShutdownSDK();
185 }
170 return ret; 186 return ret;
171 } 187 }
172 188
173 bool RenderPDFPageToBitmap(const void* pdf_buffer, 189 bool RenderPDFPageToBitmap(const void* pdf_buffer,
174 int pdf_buffer_size, 190 int pdf_buffer_size,
175 int page_number, 191 int page_number,
176 void* bitmap_buffer, 192 void* bitmap_buffer,
177 int bitmap_width, 193 int bitmap_width,
178 int bitmap_height, 194 int bitmap_height,
179 int dpi, 195 int dpi,
180 bool autorotate) { 196 bool autorotate) {
181 if (!g_sdk_initialized_via_pepper) { 197 if (!g_sdk_initialized_via_pepper) {
182 if (!chrome_pdf::InitializeSDK()) 198 SetUpV8();
199 if (!chrome_pdf::InitializeSDK()) {
200 TearDownV8();
183 return false; 201 return false;
202 }
184 } 203 }
185 scoped_ptr<chrome_pdf::PDFEngineExports> engine_exports( 204 scoped_ptr<chrome_pdf::PDFEngineExports> engine_exports(
186 chrome_pdf::PDFEngineExports::Create()); 205 chrome_pdf::PDFEngineExports::Create());
187 chrome_pdf::PDFEngineExports::RenderingSettings settings( 206 chrome_pdf::PDFEngineExports::RenderingSettings settings(
188 dpi, dpi, pp::Rect(bitmap_width, bitmap_height), true, false, true, true, 207 dpi, dpi, pp::Rect(bitmap_width, bitmap_height), true, false, true, true,
189 autorotate); 208 autorotate);
190 bool ret = engine_exports->RenderPDFPageToBitmap( 209 bool ret = engine_exports->RenderPDFPageToBitmap(
191 pdf_buffer, pdf_buffer_size, page_number, settings, bitmap_buffer); 210 pdf_buffer, pdf_buffer_size, page_number, settings, bitmap_buffer);
192 if (!g_sdk_initialized_via_pepper) { 211 if (!g_sdk_initialized_via_pepper) {
212 TearDownV8();
193 chrome_pdf::ShutdownSDK(); 213 chrome_pdf::ShutdownSDK();
194 } 214 }
195 return ret; 215 return ret;
196 } 216 }
197 217
198 } // namespace chrome_pdf 218 } // namespace chrome_pdf
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698