Bug 1401888 - Part 2. Implement PDFiumEngineShim::GetInstanceOrNull(const nsCString&) r=fatseng

With this change, we are able to load PDFium engine from different library.
MozReview-Commit-ID: ErAZCPRzRR5

--HG--
extra : rebase_source : f0421af9c70d69564ed8f96d32870314871aabef
This commit is contained in:
cku 2017-09-21 15:22:18 +08:00
Родитель 59db10f1d3
Коммит 80b1379b3e
2 изменённых файлов: 20 добавлений и 4 удалений

Просмотреть файл

@ -18,7 +18,7 @@ PDFiumEngineShim::GetInstanceOrNull()
RefPtr<PDFiumEngineShim> inst = sPDFiumEngineShim;
if (!inst) {
inst = new PDFiumEngineShim();
if (!inst->Init()) {
if (!inst->Init(nsCString("pdfium.dll"))) {
inst = nullptr;
}
sPDFiumEngineShim = inst.get();
@ -27,6 +27,18 @@ PDFiumEngineShim::GetInstanceOrNull()
return inst.forget();
}
/* static */
already_AddRefed<PDFiumEngineShim>
PDFiumEngineShim::GetInstanceOrNull(const nsCString& aLibrary)
{
RefPtr<PDFiumEngineShim> shim = new PDFiumEngineShim();
if (!shim->Init(aLibrary)) {
return nullptr;
}
return shim.forget();
}
PDFiumEngineShim::PDFiumEngineShim()
: mFPDF_InitLibrary(nullptr)
, mFPDF_DestroyLibrary(nullptr)
@ -54,13 +66,13 @@ PDFiumEngineShim::~PDFiumEngineShim()
}
bool
PDFiumEngineShim::Init()
PDFiumEngineShim::Init(const nsCString& aLibrary)
{
if (mInitialized) {
return true;
}
mPRLibrary = PR_LoadLibrary("pdfium.dll");
mPRLibrary = PR_LoadLibrary(aLibrary.get());
NS_ENSURE_TRUE(mPRLibrary, false);
mFPDF_InitLibrary = (FPDF_InitLibrary_Pfn)PR_FindFunctionSymbol(

Просмотреть файл

@ -48,6 +48,10 @@ public:
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(PDFiumEngineShim)
static already_AddRefed<PDFiumEngineShim> GetInstanceOrNull();
// This function is used for testing purpose only, do not call it in regular
// code.
static already_AddRefed<PDFiumEngineShim>
GetInstanceOrNull(const nsCString& aLibrary);
FPDF_DOCUMENT LoadDocument(FPDF_STRING file_path,
FPDF_BYTESTRING aPassword);
@ -66,7 +70,7 @@ public:
private:
PDFiumEngineShim();
~PDFiumEngineShim();
bool Init();
bool Init(const nsCString& aLibrary);
bool mInitialized ;