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

Side by Side Diff: pdf/pdfium/pdfium_engine.cc

Issue 2000323005: PDF: Use an empty password as a sentinel value for no password. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 unified diff | Download patch
« no previous file with comments | « pdf/pdfium/pdfium_engine.h ('k') | 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) 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 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 2385 matching lines...) Expand 10 before | Expand all | Expand 10 after
2396 return; 2396 return;
2397 } 2397 }
2398 2398
2399 // If we're in the middle of getting a password, just return. We will retry 2399 // If we're in the middle of getting a password, just return. We will retry
2400 // loading the document after we get the password anyway. 2400 // loading the document after we get the password anyway.
2401 if (getting_password_) 2401 if (getting_password_)
2402 return; 2402 return;
2403 2403
2404 ScopedUnsupportedFeature scoped_unsupported_feature(this); 2404 ScopedUnsupportedFeature scoped_unsupported_feature(this);
2405 bool needs_password = false; 2405 bool needs_password = false;
2406 if (TryLoadingDoc(false, std::string(), &needs_password)) { 2406 if (TryLoadingDoc(std::string(), &needs_password)) {
2407 ContinueLoadingDocument(false, std::string()); 2407 ContinueLoadingDocument(std::string());
2408 return; 2408 return;
2409 } 2409 }
2410 if (needs_password) 2410 if (needs_password)
2411 GetPasswordAndLoad(); 2411 GetPasswordAndLoad();
2412 else 2412 else
2413 client_->DocumentLoadFailed(); 2413 client_->DocumentLoadFailed();
2414 } 2414 }
2415 2415
2416 bool PDFiumEngine::TryLoadingDoc(bool with_password, 2416 bool PDFiumEngine::TryLoadingDoc(const std::string& password,
2417 const std::string& password,
2418 bool* needs_password) { 2417 bool* needs_password) {
2419 *needs_password = false; 2418 *needs_password = false;
2420 if (doc_) 2419 if (doc_)
2421 return true; 2420 return true;
2422 2421
2423 const char* password_cstr = nullptr; 2422 const char* password_cstr = nullptr;
2424 if (with_password) { 2423 if (!password.empty()) {
2425 password_cstr = password.c_str(); 2424 password_cstr = password.c_str();
2426 password_tries_remaining_--; 2425 password_tries_remaining_--;
2427 } 2426 }
2428 if (doc_loader_.IsDocumentComplete() && 2427 if (doc_loader_.IsDocumentComplete() &&
2429 !FPDFAvail_IsLinearized(fpdf_availability_)) { 2428 !FPDFAvail_IsLinearized(fpdf_availability_)) {
2430 doc_ = FPDF_LoadCustomDocument(&file_access_, password_cstr); 2429 doc_ = FPDF_LoadCustomDocument(&file_access_, password_cstr);
2431 } else { 2430 } else {
2432 doc_ = FPDFAvail_GetDocument(fpdf_availability_, password_cstr); 2431 doc_ = FPDFAvail_GetDocument(fpdf_availability_, password_cstr);
2433 } 2432 }
2434 2433
2435 if (!doc_ && FPDF_GetLastError() == FPDF_ERR_PASSWORD) 2434 if (!doc_ && FPDF_GetLastError() == FPDF_ERR_PASSWORD)
2436 *needs_password = true; 2435 *needs_password = true;
2437 2436
2438 return !!doc_; 2437 return !!doc_;
2439 } 2438 }
2440 2439
2441 void PDFiumEngine::GetPasswordAndLoad() { 2440 void PDFiumEngine::GetPasswordAndLoad() {
2442 getting_password_ = true; 2441 getting_password_ = true;
2443 DCHECK(!doc_ && FPDF_GetLastError() == FPDF_ERR_PASSWORD); 2442 DCHECK(!doc_ && FPDF_GetLastError() == FPDF_ERR_PASSWORD);
2444 client_->GetDocumentPassword(password_factory_.NewCallbackWithOutput( 2443 client_->GetDocumentPassword(password_factory_.NewCallbackWithOutput(
2445 &PDFiumEngine::OnGetPasswordComplete)); 2444 &PDFiumEngine::OnGetPasswordComplete));
2446 } 2445 }
2447 2446
2448 void PDFiumEngine::OnGetPasswordComplete(int32_t result, 2447 void PDFiumEngine::OnGetPasswordComplete(int32_t result,
2449 const pp::Var& password) { 2448 const pp::Var& password) {
2450 getting_password_ = false; 2449 getting_password_ = false;
2451 2450
2452 bool password_given = false;
2453 std::string password_text; 2451 std::string password_text;
2454 if (result == PP_OK && password.is_string()) { 2452 if (result == PP_OK && password.is_string())
2455 password_text = password.AsString(); 2453 password_text = password.AsString();
2456 if (!password_text.empty()) 2454 ContinueLoadingDocument(password_text);
2457 password_given = true;
2458 }
2459 ContinueLoadingDocument(password_given, password_text);
2460 } 2455 }
2461 2456
2462 void PDFiumEngine::ContinueLoadingDocument( 2457 void PDFiumEngine::ContinueLoadingDocument(const std::string& password) {
2463 bool has_password,
2464 const std::string& password) {
2465 ScopedUnsupportedFeature scoped_unsupported_feature(this); 2458 ScopedUnsupportedFeature scoped_unsupported_feature(this);
2466 2459
2467 bool needs_password = false; 2460 bool needs_password = false;
2468 bool loaded = TryLoadingDoc(has_password, password, &needs_password); 2461 bool loaded = TryLoadingDoc(password, &needs_password);
2469 bool password_incorrect = !loaded && has_password && needs_password; 2462 bool password_incorrect = !loaded && needs_password && !password.empty();
2470 if (password_incorrect && password_tries_remaining_ > 0) { 2463 if (password_incorrect && password_tries_remaining_ > 0) {
2471 GetPasswordAndLoad(); 2464 GetPasswordAndLoad();
2472 return; 2465 return;
2473 } 2466 }
2474 2467
2475 if (!doc_) { 2468 if (!doc_) {
2476 client_->DocumentLoadFailed(); 2469 client_->DocumentLoadFailed();
2477 return; 2470 return;
2478 } 2471 }
2479 2472
(...skipping 1397 matching lines...) Expand 10 before | Expand all | Expand 10 after
3877 FPDF_DOCUMENT doc = 3870 FPDF_DOCUMENT doc =
3878 FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, nullptr); 3871 FPDF_LoadMemDocument(pdf_buffer, pdf_buffer_size, nullptr);
3879 if (!doc) 3872 if (!doc)
3880 return false; 3873 return false;
3881 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0; 3874 bool success = FPDF_GetPageSizeByIndex(doc, page_number, width, height) != 0;
3882 FPDF_CloseDocument(doc); 3875 FPDF_CloseDocument(doc);
3883 return success; 3876 return success;
3884 } 3877 }
3885 3878
3886 } // namespace chrome_pdf 3879 } // namespace chrome_pdf
OLDNEW
« no previous file with comments | « pdf/pdfium/pdfium_engine.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698