Chromium Code Reviews| 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 "pdf/pdfium/pdfium_engine.h" | 5 #include "pdf/pdfium/pdfium_engine.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 | 8 |
| 9 #include "base/i18n/icu_encoding_detection.h" | 9 #include "base/i18n/icu_encoding_detection.h" |
| 10 #include "base/i18n/icu_string_conversions.h" | 10 #include "base/i18n/icu_string_conversions.h" |
| 11 #include "base/json/json_writer.h" | 11 #include "base/json/json_writer.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
| 14 #include "base/numerics/safe_conversions.h" | 14 #include "base/numerics/safe_conversions.h" |
| 15 #include "base/stl_util.h" | 15 #include "base/stl_util.h" |
| 16 #include "base/strings/string_number_conversions.h" | 16 #include "base/strings/string_number_conversions.h" |
| 17 #include "base/strings/string_piece.h" | 17 #include "base/strings/string_piece.h" |
| 18 #include "base/strings/string_util.h" | 18 #include "base/strings/string_util.h" |
| 19 #include "base/strings/utf_string_conversions.h" | 19 #include "base/strings/utf_string_conversions.h" |
| 20 #include "base/values.h" | 20 #include "base/values.h" |
| 21 #include "gin/array_buffer.h" | |
| 21 #include "gin/public/gin_embedders.h" | 22 #include "gin/public/gin_embedders.h" |
| 23 #include "gin/public/isolate_holder.h" | |
| 22 #include "pdf/draw_utils.h" | 24 #include "pdf/draw_utils.h" |
| 23 #include "pdf/pdfium/pdfium_api_string_buffer_adapter.h" | 25 #include "pdf/pdfium/pdfium_api_string_buffer_adapter.h" |
| 24 #include "pdf/pdfium/pdfium_mem_buffer_file_read.h" | 26 #include "pdf/pdfium/pdfium_mem_buffer_file_read.h" |
| 25 #include "pdf/pdfium/pdfium_mem_buffer_file_write.h" | 27 #include "pdf/pdfium/pdfium_mem_buffer_file_write.h" |
| 26 #include "ppapi/c/pp_errors.h" | 28 #include "ppapi/c/pp_errors.h" |
| 27 #include "ppapi/c/pp_input_event.h" | 29 #include "ppapi/c/pp_input_event.h" |
| 28 #include "ppapi/c/ppb_core.h" | 30 #include "ppapi/c/ppb_core.h" |
| 29 #include "ppapi/c/private/ppb_pdf.h" | 31 #include "ppapi/c/private/ppb_pdf.h" |
| 30 #include "ppapi/cpp/dev/memory_dev.h" | 32 #include "ppapi/cpp/dev/memory_dev.h" |
| 31 #include "ppapi/cpp/input_event.h" | 33 #include "ppapi/cpp/input_event.h" |
| (...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 442 return std::string(); | 444 return std::string(); |
| 443 | 445 |
| 444 base::string16 value; | 446 base::string16 value; |
| 445 PDFiumAPIStringBufferSizeInBytesAdapter<base::string16> string_adapter( | 447 PDFiumAPIStringBufferSizeInBytesAdapter<base::string16> string_adapter( |
| 446 &value, size, false); | 448 &value, size, false); |
| 447 string_adapter.Close( | 449 string_adapter.Close( |
| 448 FPDF_GetMetaText(doc, key.c_str(), string_adapter.GetData(), size)); | 450 FPDF_GetMetaText(doc, key.c_str(), string_adapter.GetData(), size)); |
| 449 return base::UTF16ToUTF8(value); | 451 return base::UTF16ToUTF8(value); |
| 450 } | 452 } |
| 451 | 453 |
| 454 gin::IsolateHolder* g_isolate_holder = nullptr; | |
| 455 | |
| 456 void SetUpV8() { | |
| 457 gin::IsolateHolder::Initialize(gin::IsolateHolder::kNonStrictMode, | |
| 458 gin::ArrayBufferAllocator::SharedInstance()); | |
| 459 g_isolate_holder = | |
| 460 new gin::IsolateHolder(gin::IsolateHolder::kSingleThread); | |
| 461 g_isolate_holder->isolate()->Enter(); | |
| 462 } | |
| 463 | |
| 464 void TearDownV8() { | |
| 465 g_isolate_holder->isolate()->Exit(); | |
| 466 delete g_isolate_holder; | |
| 467 g_isolate_holder = nullptr; | |
| 468 } | |
| 469 | |
| 452 } // namespace | 470 } // namespace |
| 453 | 471 |
| 454 bool InitializeSDK() { | 472 bool InitializeSDK() { |
| 473 SetUpV8(); | |
| 474 | |
| 455 FPDF_LIBRARY_CONFIG config; | 475 FPDF_LIBRARY_CONFIG config; |
| 456 config.version = 2; | 476 config.version = 2; |
| 457 config.m_pUserFontPaths = nullptr; | 477 config.m_pUserFontPaths = nullptr; |
| 458 config.m_pIsolate = v8::Isolate::GetCurrent(); | 478 config.m_pIsolate = v8::Isolate::GetCurrent(); |
| 459 config.m_v8EmbedderSlot = gin::kEmbedderPDFium; | 479 config.m_v8EmbedderSlot = gin::kEmbedderPDFium; |
| 460 FPDF_InitLibraryWithConfig(&config); | 480 FPDF_InitLibraryWithConfig(&config); |
| 461 | 481 |
| 462 #if defined(OS_LINUX) | 482 #if defined(OS_LINUX) |
| 463 // Font loading doesn't work in the renderer sandbox in Linux. | 483 // Font loading doesn't work in the renderer sandbox in Linux. |
| 464 FPDF_SetSystemFontInfo(&g_font_info); | 484 FPDF_SetSystemFontInfo(&g_font_info); |
| 465 #endif | 485 #endif |
| 466 | 486 |
| 467 FSDK_SetUnSpObjProcessHandler(&g_unsupported_info); | 487 FSDK_SetUnSpObjProcessHandler(&g_unsupported_info); |
| 468 | 488 |
| 469 return true; | 489 return true; |
|
Lei Zhang
2015/11/06 05:04:11
And we don't even return false. I'll fix this by c
| |
| 470 } | 490 } |
| 471 | 491 |
| 472 void ShutdownSDK() { | 492 void ShutdownSDK() { |
| 493 TearDownV8(); | |
| 473 FPDF_DestroyLibrary(); | 494 FPDF_DestroyLibrary(); |
| 474 } | 495 } |
| 475 | 496 |
| 476 PDFEngine* PDFEngine::Create(PDFEngine::Client* client) { | 497 PDFEngine* PDFEngine::Create(PDFEngine::Client* client) { |
| 477 return new PDFiumEngine(client); | 498 return new PDFiumEngine(client); |
| 478 } | 499 } |
| 479 | 500 |
| 480 PDFiumEngine::PDFiumEngine(PDFEngine::Client* client) | 501 PDFiumEngine::PDFiumEngine(PDFEngine::Client* client) |
| 481 : client_(client), | 502 : client_(client), |
| 482 current_zoom_(1.0), | 503 current_zoom_(1.0), |
| (...skipping 3486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3969 double* height) { | 3990 double* height) { |
| 3970 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL); | 3991 FPDF_DOCUMENT doc = FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, NULL); |
| 3971 if (!doc) | 3992 if (!doc) |
| 3972 return false; | 3993 return false; |
| 3973 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; | 3994 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; |
| 3974 FPDF_CloseDocument(doc); | 3995 FPDF_CloseDocument(doc); |
| 3975 return success; | 3996 return success; |
| 3976 } | 3997 } |
| 3977 | 3998 |
| 3978 } // namespace chrome_pdf | 3999 } // namespace chrome_pdf |
| OLD | NEW |