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

Unified Diff: fpdfsdk/javascript/Document.cpp

Issue 2235883003: Make Document's 'info' property readonly (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 4 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | testing/resources/javascript/document_props_expected.txt » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: fpdfsdk/javascript/Document.cpp
diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp
index 40e13125300627163b261402160b98226a4903ef..ea77e1cfad46fb660f450c43b88d73d477a7a6cb 100644
--- a/fpdfsdk/javascript/Document.cpp
+++ b/fpdfsdk/javascript/Document.cpp
@@ -749,6 +749,12 @@ FX_BOOL Document::author(IJS_Context* cc,
FX_BOOL Document::info(IJS_Context* cc,
CJS_PropValue& vp,
CFX_WideString& sError) {
+ if (vp.IsSetting()) {
+ CJS_Context* pContext = static_cast<CJS_Context*>(cc);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
+ return FALSE;
+ }
+
CPDF_Dictionary* pDictionary = m_pDocument->GetPDFDocument()->GetInfo();
if (!pDictionary)
return FALSE;
@@ -763,38 +769,36 @@ FX_BOOL Document::info(IJS_Context* cc,
CFX_WideString cwModDate = pDictionary->GetUnicodeTextBy("ModDate");
CFX_WideString cwTrapped = pDictionary->GetUnicodeTextBy("Trapped");
+ CJS_Context* pContext = (CJS_Context*)cc;
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ v8::Local<v8::Object> pObj =
+ FXJS_NewFxDynamicObj(pRuntime->GetIsolate(), pRuntime, -1);
+
v8::Isolate* isolate = GetIsolate(cc);
- if (vp.IsGetting()) {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- v8::Local<v8::Object> pObj =
- FXJS_NewFxDynamicObj(pRuntime->GetIsolate(), pRuntime, -1);
- FXJS_PutObjectString(isolate, pObj, L"Author", cwAuthor);
- FXJS_PutObjectString(isolate, pObj, L"Title", cwTitle);
- FXJS_PutObjectString(isolate, pObj, L"Subject", cwSubject);
- FXJS_PutObjectString(isolate, pObj, L"Keywords", cwKeywords);
- FXJS_PutObjectString(isolate, pObj, L"Creator", cwCreator);
- FXJS_PutObjectString(isolate, pObj, L"Producer", cwProducer);
- FXJS_PutObjectString(isolate, pObj, L"CreationDate", cwCreationDate);
- FXJS_PutObjectString(isolate, pObj, L"ModDate", cwModDate);
- FXJS_PutObjectString(isolate, pObj, L"Trapped", cwTrapped);
-
- // It's to be compatible to non-standard info dictionary.
- for (const auto& it : *pDictionary) {
- const CFX_ByteString& bsKey = it.first;
- CPDF_Object* pValueObj = it.second;
- CFX_WideString wsKey = CFX_WideString::FromUTF8(bsKey.AsStringC());
- if (pValueObj->IsString() || pValueObj->IsName()) {
- FXJS_PutObjectString(isolate, pObj, wsKey, pValueObj->GetUnicodeText());
- } else if (pValueObj->IsNumber()) {
- FXJS_PutObjectNumber(isolate, pObj, wsKey,
- (float)pValueObj->GetNumber());
- } else if (pValueObj->IsBoolean()) {
- FXJS_PutObjectBoolean(isolate, pObj, wsKey, !!pValueObj->GetInteger());
- }
+ FXJS_PutObjectString(isolate, pObj, L"Author", cwAuthor);
+ FXJS_PutObjectString(isolate, pObj, L"Title", cwTitle);
+ FXJS_PutObjectString(isolate, pObj, L"Subject", cwSubject);
+ FXJS_PutObjectString(isolate, pObj, L"Keywords", cwKeywords);
+ FXJS_PutObjectString(isolate, pObj, L"Creator", cwCreator);
+ FXJS_PutObjectString(isolate, pObj, L"Producer", cwProducer);
+ FXJS_PutObjectString(isolate, pObj, L"CreationDate", cwCreationDate);
+ FXJS_PutObjectString(isolate, pObj, L"ModDate", cwModDate);
+ FXJS_PutObjectString(isolate, pObj, L"Trapped", cwTrapped);
+
+ // It's to be compatible to non-standard info dictionary.
+ for (const auto& it : *pDictionary) {
+ const CFX_ByteString& bsKey = it.first;
+ CPDF_Object* pValueObj = it.second;
+ CFX_WideString wsKey = CFX_WideString::FromUTF8(bsKey.AsStringC());
+ if (pValueObj->IsString() || pValueObj->IsName()) {
+ FXJS_PutObjectString(isolate, pObj, wsKey, pValueObj->GetUnicodeText());
+ } else if (pValueObj->IsNumber()) {
+ FXJS_PutObjectNumber(isolate, pObj, wsKey, (float)pValueObj->GetNumber());
+ } else if (pValueObj->IsBoolean()) {
+ FXJS_PutObjectBoolean(isolate, pObj, wsKey, !!pValueObj->GetInteger());
}
- vp << pObj;
}
+ vp << pObj;
return TRUE;
}
« no previous file with comments | « no previous file | testing/resources/javascript/document_props_expected.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698