1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/proxy/pdf_resource.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <stdlib.h> 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <string.h> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/command_line.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/metrics/histogram.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/pp_errors.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/c/private/ppb_pdf.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/proxy/ppb_image_data_proxy.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ppapi/shared_impl/var.h" 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/icu/source/i18n/unicode/usearch.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace ppapi { 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace proxy { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(raymes): This is just copied from render_thread_impl.cc. We should have 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// generic code somewhere to get the locale in the plugin. 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)std::string GetLocale() { 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The browser process should have passed the locale to the plugin via the 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // --lang command line flag. 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess(); 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& lang = parsed_command_line.GetSwitchValueASCII("lang"); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!lang.empty()); 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return lang; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)PDFResource::PDFResource(Connection connection, PP_Instance instance) 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : PluginResource(connection, instance) { 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SendCreate(RENDERER, PpapiHostMsg_PDF_Create()); 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)PDFResource::~PDFResource() { 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)thunk::PPB_PDF_API* PDFResource::AsPPB_PDF_API() { 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return this; 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)PP_Var PDFResource::GetLocalizedString(PP_ResourceString string_id) { 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string localized_string; 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int32_t result = SyncCall<PpapiPluginMsg_PDF_GetLocalizedStringReply>( 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RENDERER, PpapiHostMsg_PDF_GetLocalizedString(string_id), 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &localized_string); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (result != PP_OK) 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return PP_MakeUndefined(); 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return ppapi::StringVar::StringToPPVar(localized_string); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PDFResource::SearchString(const unsigned short* input_string, 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const unsigned short* input_term, 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool case_sensitive, 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_PrivateFindResult** results, int* count) { 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (locale_.empty()) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) locale_ = GetLocale(); 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::char16* string = 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reinterpret_cast<const base::char16*>(input_string); 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::char16* term = 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) reinterpret_cast<const base::char16*>(input_term); 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UStringSearch* searcher = usearch_open(term, -1, string, -1, locale_.c_str(), 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 0, &status); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(status == U_ZERO_ERROR || status == U_USING_FALLBACK_WARNING || 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status == U_USING_DEFAULT_WARNING); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UCollationStrength strength = case_sensitive ? UCOL_TERTIARY : UCOL_PRIMARY; 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UCollator* collator = usearch_getCollator(searcher); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (ucol_getStrength(collator) != strength) { 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ucol_setStrength(collator, strength); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) usearch_reset(searcher); 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) status = U_ZERO_ERROR; 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int match_start = usearch_first(searcher, &status); 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(status == U_ZERO_ERROR); 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<PP_PrivateFindResult> pp_results; 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) while (match_start != USEARCH_DONE) { 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t matched_length = usearch_getMatchedLength(searcher); 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_PrivateFindResult result; 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result.start_index = match_start; 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result.length = matched_length; 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pp_results.push_back(result); 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) match_start = usearch_next(searcher, &status); 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(status == U_ZERO_ERROR); 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *count = pp_results.size(); 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (*count) { 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *results = reinterpret_cast<PP_PrivateFindResult*>(malloc( 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *count * sizeof(PP_PrivateFindResult))); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) memcpy(*results, &pp_results[0], *count * sizeof(PP_PrivateFindResult)); 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *results = NULL; 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) usearch_close(searcher); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PDFResource::DidStartLoading() { 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Post(RENDERER, PpapiHostMsg_PDF_DidStartLoading()); 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PDFResource::DidStopLoading() { 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Post(RENDERER, PpapiHostMsg_PDF_DidStopLoading()); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PDFResource::SetContentRestriction(int restrictions) { 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Post(RENDERER, PpapiHostMsg_PDF_SetContentRestriction(restrictions)); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PDFResource::HistogramPDFPageCount(int count) { 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UMA_HISTOGRAM_COUNTS_10000("PDF.PageCount", count); 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PDFResource::UserMetricsRecordAction(const PP_Var& action) { 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<ppapi::StringVar> action_str( 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ppapi::StringVar::FromPPVar(action)); 130868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (action_str.get()) { 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Post(RENDERER, 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PpapiHostMsg_PDF_UserMetricsRecordAction(action_str->value())); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PDFResource::HasUnsupportedFeature() { 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Post(RENDERER, PpapiHostMsg_PDF_HasUnsupportedFeature()); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PDFResource::Print() { 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Post(RENDERER, PpapiHostMsg_PDF_Print()); 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PDFResource::SaveAs() { 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Post(RENDERER, PpapiHostMsg_PDF_SaveAs()); 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)PP_Bool PDFResource::IsFeatureEnabled(PP_PDFFeature feature) { 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PP_Bool result = PP_FALSE; 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) switch (feature) { 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case PP_PDFFEATURE_HIDPI: 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result = PP_TRUE; 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) break; 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case PP_PDFFEATURE_PRINTING: 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(raymes): Use PrintWebViewHelper::IsPrintingEnabled. 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result = PP_FALSE; 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) break; 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return result; 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)PP_Resource PDFResource::GetResourceImageForScale(PP_ResourceImage image_id, 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) float scale) { 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC::Message reply; 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResourceMessageReplyParams reply_params; 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int32_t result = GenericSyncCall( 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RENDERER, PpapiHostMsg_PDF_GetResourceImage(image_id, scale), &reply, 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &reply_params); 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (result != PP_OK) 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return 0; 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HostResource resource; 17390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) PP_ImageDataDesc image_desc; 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!UnpackMessage<PpapiPluginMsg_PDF_GetResourceImageReply>( 1757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) reply, &resource, &image_desc)) { 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return 0; 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (resource.is_null()) 18090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return 0; 18190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!PPB_ImageData_Shared::IsImageDataDescValid(image_desc)) 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return 0; 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::SharedMemoryHandle handle; 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!reply_params.TakeSharedMemoryHandleAtIndex(0, &handle)) 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return 0; 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return (new SimpleImageData(resource, image_desc, handle))->GetReference(); 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)PP_Resource PDFResource::GetResourceImage(PP_ResourceImage image_id) { 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetResourceImageForScale(image_id, 1.0f); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)PP_Bool PDFResource::IsOutOfProcess() { 195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return PP_TRUE; 196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void PDFResource::SetSelectedText(const char* selected_text) { 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Post(RENDERER, 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PpapiHostMsg_PDF_SetSelectedText(base::UTF8ToUTF16(selected_text))); 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void PDFResource::SetLinkUnderCursor(const char* url) { 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Post(RENDERER, PpapiHostMsg_PDF_SetLinkUnderCursor(url)); 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace proxy 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace ppapi 209