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

Side by Side Diff: webkit/plugins/ppapi/ppapi_plugin_instance.cc

Issue 7200040: Pass through PDFs from the plugin when using Skia on the Mac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix crash Created 9 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « webkit/plugins/ppapi/ppapi_plugin_instance.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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "webkit/plugins/ppapi/ppapi_plugin_instance.h" 5 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 #include "webkit/plugins/ppapi/string.h" 62 #include "webkit/plugins/ppapi/string.h"
63 #include "webkit/plugins/ppapi/var.h" 63 #include "webkit/plugins/ppapi/var.h"
64 #include "webkit/plugins/sad_plugin.h" 64 #include "webkit/plugins/sad_plugin.h"
65 65
66 #if defined(OS_MACOSX) 66 #if defined(OS_MACOSX)
67 #include "base/mac/mac_util.h" 67 #include "base/mac/mac_util.h"
68 #include "base/mac/scoped_cftyperef.h" 68 #include "base/mac/scoped_cftyperef.h"
69 #include "printing/metafile_impl.h" 69 #include "printing/metafile_impl.h"
70 #endif 70 #endif
71 71
72 #if defined(OS_LINUX) || defined(OS_WIN) || \ 72 #if defined(USE_SKIA)
73 (defined(OS_MACOSX) && defined(USE_SKIA))
74 #include "printing/metafile.h" 73 #include "printing/metafile.h"
75 #include "printing/metafile_skia_wrapper.h" 74 #include "printing/metafile_skia_wrapper.h"
76 #endif 75 #endif
77 76
78 #if defined(OS_WIN) 77 #if defined(OS_WIN)
79 #include "skia/ext/vector_platform_device_emf_win.h" 78 #include "skia/ext/vector_platform_device_emf_win.h"
80 #include "ui/gfx/codec/jpeg_codec.h" 79 #include "ui/gfx/codec/jpeg_codec.h"
81 #include "ui/gfx/gdi_util.h" 80 #include "ui/gfx/gdi_util.h"
82 #endif 81 #endif
kmadhusu 2011/06/30 17:58:09 nit: #endif // USE_SKIA
83 82
84 #if defined(OS_MACOSX) && defined(USE_SKIA) 83 #if defined(OS_MACOSX) && defined(USE_SKIA)
85 #include "skia/ext/skia_utils_mac.h" 84 #include "skia/ext/skia_utils_mac.h"
86 #endif 85 #endif
87 86
88 using ppapi::thunk::EnterResourceNoLock; 87 using ppapi::thunk::EnterResourceNoLock;
89 using ppapi::thunk::PPB_Buffer_API; 88 using ppapi::thunk::PPB_Buffer_API;
90 using ppapi::thunk::PPB_Graphics2D_API; 89 using ppapi::thunk::PPB_Graphics2D_API;
91 using ppapi::thunk::PPB_ImageData_API; 90 using ppapi::thunk::PPB_ImageData_API;
92 using ppapi::thunk::PPB_Instance_FunctionAPI; 91 using ppapi::thunk::PPB_Instance_FunctionAPI;
(...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after
888 break; 887 break;
889 default: 888 default:
890 return 0; 889 return 0;
891 } 890 }
892 num_pages = plugin_print_interface_->Begin_0_3(pp_instance(), 891 num_pages = plugin_print_interface_->Begin_0_3(pp_instance(),
893 &print_settings_0_3); 892 &print_settings_0_3);
894 } 893 }
895 if (!num_pages) 894 if (!num_pages)
896 return 0; 895 return 0;
897 current_print_settings_ = print_settings; 896 current_print_settings_ = print_settings;
898 #if WEBKIT_USING_SKIA 897 #if defined(OS_LINUX) || defined(OS_WIN)
899 canvas_ = NULL; 898 canvas_ = NULL;
900 ranges_.clear(); 899 ranges_.clear();
901 #endif // WEBKIT_USING_SKIA 900 #endif // OS_LINUX || OS_WIN
902 return num_pages; 901 return num_pages;
903 } 902 }
904 903
905 bool PluginInstance::PrintPage(int page_number, WebKit::WebCanvas* canvas) { 904 bool PluginInstance::PrintPage(int page_number, WebKit::WebCanvas* canvas) {
906 DCHECK(plugin_print_interface_.get()); 905 DCHECK(plugin_print_interface_.get());
907 PP_PrintPageNumberRange_Dev page_range; 906 PP_PrintPageNumberRange_Dev page_range;
908 page_range.first_page_number = page_range.last_page_number = page_number; 907 page_range.first_page_number = page_range.last_page_number = page_number;
909 #if WEBKIT_USING_SKIA 908 #if defined(OS_LINUX) || defined(OS_WIN)
910 // The canvas only has a metafile on it for print preview. 909 // The canvas only has a metafile on it for print preview.
911 if (printing::MetafileSkiaWrapper::GetMetafileFromCanvas(canvas)) { 910 if (printing::MetafileSkiaWrapper::GetMetafileFromCanvas(canvas)) {
912 ranges_.push_back(page_range); 911 ranges_.push_back(page_range);
913 canvas_ = canvas; 912 canvas_ = canvas;
914 return true; 913 return true;
915 } else 914 } else
916 #endif // WEBKIT_USING_SKIA 915 #endif // OS_LINUX || OS_WIN
917 { 916 {
918 return PrintPageHelper(&page_range, 1, canvas); 917 return PrintPageHelper(&page_range, 1, canvas);
919 } 918 }
920 } 919 }
921 920
922 bool PluginInstance::PrintPageHelper(PP_PrintPageNumberRange_Dev* page_ranges, 921 bool PluginInstance::PrintPageHelper(PP_PrintPageNumberRange_Dev* page_ranges,
923 int num_ranges, 922 int num_ranges,
924 WebKit::WebCanvas* canvas) { 923 WebKit::WebCanvas* canvas) {
925 // Keep a reference on the stack. See NOTE above. 924 // Keep a reference on the stack. See NOTE above.
926 scoped_refptr<PluginInstance> ref(this); 925 scoped_refptr<PluginInstance> ref(this);
(...skipping 11 matching lines...) Expand all
938 937
939 // Now we need to release the print output resource. 938 // Now we need to release the print output resource.
940 PluginModule::GetCore()->ReleaseResource(print_output); 939 PluginModule::GetCore()->ReleaseResource(print_output);
941 940
942 return ret; 941 return ret;
943 } 942 }
944 943
945 void PluginInstance::PrintEnd() { 944 void PluginInstance::PrintEnd() {
946 // Keep a reference on the stack. See NOTE above. 945 // Keep a reference on the stack. See NOTE above.
947 scoped_refptr<PluginInstance> ref(this); 946 scoped_refptr<PluginInstance> ref(this);
948 #if WEBKIT_USING_SKIA 947 #if defined(OS_LINUX) || defined(OS_WIN)
949 if (!ranges_.empty()) 948 if (!ranges_.empty())
950 PrintPageHelper(&(ranges_.front()), ranges_.size(), canvas_.get()); 949 PrintPageHelper(&(ranges_.front()), ranges_.size(), canvas_.get());
951 canvas_ = NULL; 950 canvas_ = NULL;
952 ranges_.clear(); 951 ranges_.clear();
953 #endif // WEBKIT_USING_SKIA 952 #endif // OS_LINUX || OS_WIN
954 953
955 DCHECK(plugin_print_interface_.get()); 954 DCHECK(plugin_print_interface_.get());
956 if (plugin_print_interface_.get()) 955 if (plugin_print_interface_.get())
957 plugin_print_interface_->End(pp_instance()); 956 plugin_print_interface_->End(pp_instance());
958 957
959 memset(&current_print_settings_, 0, sizeof(current_print_settings_)); 958 memset(&current_print_settings_, 0, sizeof(current_print_settings_));
960 #if defined(OS_MACOSX) 959 #if defined(OS_MACOSX)
961 last_printed_page_ = NULL; 960 last_printed_page_ = NULL;
962 #endif // defined(OS_MACOSX) 961 #endif // defined(OS_MACOSX)
963 } 962 }
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1058 if (!pdf_module) 1057 if (!pdf_module)
1059 return false; 1058 return false;
1060 RenderPDFPageToDCProc render_proc = 1059 RenderPDFPageToDCProc render_proc =
1061 reinterpret_cast<RenderPDFPageToDCProc>( 1060 reinterpret_cast<RenderPDFPageToDCProc>(
1062 GetProcAddress(pdf_module, "RenderPDFPageToDC")); 1061 GetProcAddress(pdf_module, "RenderPDFPageToDC"));
1063 if (!render_proc) 1062 if (!render_proc)
1064 return false; 1063 return false;
1065 #endif // defined(OS_WIN) 1064 #endif // defined(OS_WIN)
1066 1065
1067 bool ret = false; 1066 bool ret = false;
1068 #if defined(OS_LINUX) 1067 #if defined(OS_LINUX) || (defined(OS_MACOSX) && defined(USE_SKIA))
1069 // On Linux we just set the final bits in the native metafile 1068 // On Linux we just set the final bits in the native metafile
1070 // (NativeMetafile and PreviewMetafile must have compatible formats, 1069 // (NativeMetafile and PreviewMetafile must have compatible formats,
1071 // i.e. both PDF for this to work). 1070 // i.e. both PDF for this to work).
1072 printing::Metafile* metafile = 1071 printing::Metafile* metafile =
1073 printing::MetafileSkiaWrapper::GetMetafileFromCanvas(canvas); 1072 printing::MetafileSkiaWrapper::GetMetafileFromCanvas(canvas);
1074 DCHECK(metafile != NULL); 1073 DCHECK(metafile != NULL);
1075 if (metafile) 1074 if (metafile)
1076 ret = metafile->InitFromData(mapper.data(), mapper.size()); 1075 ret = metafile->InitFromData(mapper.data(), mapper.size());
1077 #elif defined(OS_MACOSX) 1076 #elif defined(OS_MACOSX)
1078 printing::NativeMetafile metafile; 1077 printing::NativeMetafile metafile;
1079 // Create a PDF metafile and render from there into the passed in context. 1078 // Create a PDF metafile and render from there into the passed in context.
1080 if (metafile.InitFromData(mapper.data(), mapper.size())) { 1079 if (metafile.InitFromData(mapper.data(), mapper.size())) {
1081 // Flip the transform. 1080 // Flip the transform.
1082 #if defined(USE_SKIA)
1083 gfx::SkiaBitLocker bit_locker(canvas);
1084 CGContextRef cgContext = bit_locker.cgContext();
1085 #else
1086 CGContextRef cgContext = canvas; 1081 CGContextRef cgContext = canvas;
1087 #endif
1088 CGContextSaveGState(cgContext); 1082 CGContextSaveGState(cgContext);
1089 CGContextTranslateCTM(cgContext, 0, 1083 CGContextTranslateCTM(cgContext, 0,
1090 current_print_settings_.printable_area.size.height); 1084 current_print_settings_.printable_area.size.height);
1091 CGContextScaleCTM(cgContext, 1.0, -1.0); 1085 CGContextScaleCTM(cgContext, 1.0, -1.0);
1092 CGRect page_rect; 1086 CGRect page_rect;
1093 page_rect.origin.x = current_print_settings_.printable_area.point.x; 1087 page_rect.origin.x = current_print_settings_.printable_area.point.x;
1094 page_rect.origin.y = current_print_settings_.printable_area.point.y; 1088 page_rect.origin.y = current_print_settings_.printable_area.point.y;
1095 page_rect.size.width = current_print_settings_.printable_area.size.width; 1089 page_rect.size.width = current_print_settings_.printable_area.size.width;
1096 page_rect.size.height = current_print_settings_.printable_area.size.height; 1090 page_rect.size.height = current_print_settings_.printable_area.size.height;
1097 1091
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
1496 } 1490 }
1497 1491
1498 PP_Bool PluginInstance::GetScreenSize(PP_Instance instance, PP_Size* size) { 1492 PP_Bool PluginInstance::GetScreenSize(PP_Instance instance, PP_Size* size) {
1499 gfx::Size screen_size = delegate()->GetScreenSize(); 1493 gfx::Size screen_size = delegate()->GetScreenSize();
1500 *size = PP_MakeSize(screen_size.width(), screen_size.height()); 1494 *size = PP_MakeSize(screen_size.width(), screen_size.height());
1501 return PP_TRUE; 1495 return PP_TRUE;
1502 } 1496 }
1503 1497
1504 } // namespace ppapi 1498 } // namespace ppapi
1505 } // namespace webkit 1499 } // namespace webkit
OLDNEW
« no previous file with comments | « webkit/plugins/ppapi/ppapi_plugin_instance.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698