Convert /printing to use ARC
See https://chromium.googlesource.com/chromium/src/+/main/docs/mac/arc.md
for information about this conversion.
Bug: 1280317
Change-Id: I122a015b23762fca7b1cd2d5493098a9e20a0994
Cq-Include-Trybots: luci.chromium.try:ios-blink-dbg-fyi
Cq-Include-Trybots: luci.chrome.try:mac-chrome
Validate-Test-Flakiness: skip
Low-Coverage-Reason: Doing core refactoring across all of Chromium; I do not own this code
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4585150
Auto-Submit: Avi Drissman <avi@chromium.org>
Commit-Queue: Avi Drissman <avi@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1153448}
diff --git a/printing/BUILD.gn b/printing/BUILD.gn
index d45e62e..0892e875 100644
--- a/printing/BUILD.gn
+++ b/printing/BUILD.gn
@@ -238,6 +238,10 @@
deps += [ "//ui/linux:linux_ui" ]
}
+ if (is_apple) {
+ configs += [ "//build/config/compiler:enable_arc" ]
+ }
+
if (is_mac) {
sources += [
"print_settings_initializer_mac.cc",
diff --git a/printing/printing_context_mac.h b/printing/printing_context_mac.h
index 59c6989..3f6289a 100644
--- a/printing/printing_context_mac.h
+++ b/printing/printing_context_mac.h
@@ -6,15 +6,19 @@
#define PRINTING_PRINTING_CONTEXT_MAC_H_
#include <ApplicationServices/ApplicationServices.h>
+
#include <string>
-#include "base/mac/scoped_nsobject.h"
#include "base/memory/raw_ptr_exclusion.h"
#include "base/strings/string_piece.h"
#include "printing/mojom/print.mojom.h"
#include "printing/print_job_constants.h"
#include "printing/printing_context.h"
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
@class NSPrintInfo;
namespace printing {
@@ -107,13 +111,13 @@
mojom::ResultCode PageDone();
// The native print info object.
- base::scoped_nsobject<NSPrintInfo> print_info_;
+ NSPrintInfo* __strong print_info_;
// The current page's context; only valid between NewPage and PageDone call
// pairs.
// This field is not a raw_ptr<> because it was filtered by the rewriter
// for: #addr-of
- RAW_PTR_EXCLUSION CGContext* context_;
+ RAW_PTR_EXCLUSION CGContextRef context_ = nullptr;
};
} // namespace printing
diff --git a/printing/printing_context_mac.mm b/printing/printing_context_mac.mm
index 22df5f2..01df1c7 100644
--- a/printing/printing_context_mac.mm
+++ b/printing/printing_context_mac.mm
@@ -5,13 +5,16 @@
#include "printing/printing_context_mac.h"
#import <AppKit/AppKit.h>
+#include <CoreFoundation/CoreFoundation.h>
#import <QuartzCore/QuartzCore.h>
#include <cups/cups.h>
#import <iomanip>
#import <numeric>
+#include "base/apple/bridging.h"
#include "base/check.h"
+#include "base/mac/foundation_util.h"
#include "base/mac/scoped_cftyperef.h"
#include "base/strings/string_piece.h"
#include "base/strings/sys_string_conversions.h"
@@ -26,11 +29,15 @@
#include "printing/printing_features.h"
#include "printing/units.h"
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
namespace printing {
namespace {
-const int kMaxPaperSizeDiffereceInPoints = 2;
+const int kMaxPaperSizeDifferenceInPoints = 2;
// Return true if PPD name of paper is equal.
bool IsPaperNameEqual(CFStringRef name1, const PMPaper& paper2) {
@@ -46,9 +53,10 @@
double height) {
double best_match = std::numeric_limits<double>::max();
PMPaper best_matching_paper = nullptr;
- int num_papers = CFArrayGetCount(paper_list);
- for (int i = 0; i < num_papers; ++i) {
- PMPaper paper = (PMPaper)((NSArray*)paper_list)[i];
+
+ CFIndex num_papers = CFArrayGetCount(paper_list);
+ for (CFIndex i = 0; i < num_papers; ++i) {
+ PMPaper paper = (PMPaper)CFArrayGetValueAtIndex(paper_list, i);
double paper_width = 0.0;
double paper_height = 0.0;
PMPaperGetWidth(paper, &paper_width);
@@ -57,8 +65,9 @@
std::max(fabs(width - paper_width), fabs(height - paper_height));
// Ignore papers with size too different from expected.
- if (difference > kMaxPaperSizeDiffereceInPoints)
+ if (difference > kMaxPaperSizeDifferenceInPoints) {
continue;
+ }
if (name && IsPaperNameEqual(name, paper))
return paper;
@@ -87,8 +96,7 @@
PrintingContextMac::PrintingContextMac(Delegate* delegate)
: PrintingContext(delegate),
- print_info_([[NSPrintInfo sharedPrintInfo] copy]),
- context_(nullptr) {}
+ print_info_([NSPrintInfo.sharedPrintInfo copy]) {}
PrintingContextMac::~PrintingContextMac() {
ReleaseContext();
@@ -101,7 +109,7 @@
// Exceptions can also happen when the NSPrintPanel is being
// deallocated, so it must be autoreleased within this scope.
@autoreleasepool {
- DCHECK([NSThread isMainThread]);
+ DCHECK(NSThread.isMainThread);
// We deliberately don't feed max_pages into the dialog, because setting
// NSPrintLastPage makes the print dialog pre-select the option to only
@@ -111,23 +119,19 @@
// adding a new custom view to the panel on 10.5; 10.6 has
// NSPrintPanelShowsPrintSelection).
NSPrintPanel* panel = [NSPrintPanel printPanel];
- NSPrintInfo* print_info = print_info_.get();
-
- NSPrintPanelOptions options = [panel options];
- options |= NSPrintPanelShowsPaperSize;
- options |= NSPrintPanelShowsOrientation;
- options |= NSPrintPanelShowsScaling;
- [panel setOptions:options];
+ panel.options |= NSPrintPanelShowsPaperSize & NSPrintPanelShowsOrientation &
+ NSPrintPanelShowsScaling;
// Set the print job title text.
gfx::NativeView parent_view = delegate_->GetParentView();
if (parent_view) {
- NSString* job_title = [[parent_view.GetNativeNSView() window] title];
+ NSString* job_title = parent_view.GetNativeNSView().window.title;
if (job_title) {
PMPrintSettings print_settings =
- (PMPrintSettings)[print_info PMPrintSettings];
- PMPrintSettingsSetJobName(print_settings, (CFStringRef)job_title);
- [print_info updateFromPMPrintSettings];
+ static_cast<PMPrintSettings>([print_info_ PMPrintSettings]);
+ PMPrintSettingsSetJobName(print_settings,
+ base::apple::NSToCFPtrCast(job_title));
+ [print_info_ updateFromPMPrintSettings];
}
}
@@ -140,9 +144,9 @@
// after the current transaction. See https://crbug.com/849538.
__block auto block_callback = std::move(callback);
[CATransaction setCompletionBlock:^{
- NSInteger selection = [panel runModalWithPrintInfo:print_info];
+ NSInteger selection = [panel runModalWithPrintInfo:print_info_];
if (selection == NSModalResponseOK) {
- print_info_.reset([[panel printInfo] retain]);
+ print_info_ = [panel printInfo];
settings_->set_ranges(GetPageRangesFromPrintInfo());
InitPrintSettingsFromPrintInfo();
std::move(block_callback).Run(mojom::ResultCode::kSuccess);
@@ -156,11 +160,11 @@
gfx::Size PrintingContextMac::GetPdfPaperSizeDeviceUnits() {
// NOTE: Reset |print_info_| with a copy of |sharedPrintInfo| so as to start
// with a clean slate.
- print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]);
+ print_info_ = [[NSPrintInfo sharedPrintInfo] copy];
UpdatePageFormatWithPaperInfo();
PMPageFormat page_format =
- static_cast<PMPageFormat>([print_info_.get() PMPageFormat]);
+ static_cast<PMPageFormat>([print_info_ PMPageFormat]);
PMRect paper_rect;
PMGetAdjustedPaperRect(page_format, &paper_rect);
@@ -174,7 +178,7 @@
mojom::ResultCode PrintingContextMac::UseDefaultSettings() {
DCHECK(!in_print_job_);
- print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]);
+ print_info_ = [[NSPrintInfo sharedPrintInfo] copy];
settings_->set_ranges(GetPageRangesFromPrintInfo());
InitPrintSettingsFromPrintInfo();
@@ -188,7 +192,7 @@
// NOTE: Reset |print_info_| with a copy of |sharedPrintInfo| so as to start
// with a clean slate.
- print_info_.reset([[NSPrintInfo sharedPrintInfo] copy]);
+ print_info_ = [[NSPrintInfo sharedPrintInfo] copy];
if (printer_settings.external_preview) {
if (!SetPrintPreviewJob())
@@ -210,7 +214,7 @@
return OnError();
}
- [print_info_.get() updateFromPMPrintSettings];
+ [print_info_ updateFromPMPrintSettings];
InitPrintSettingsFromPrintInfo();
return mojom::ResultCode::kSuccess;
@@ -218,9 +222,9 @@
bool PrintingContextMac::SetPrintPreviewJob() {
PMPrintSession print_session =
- static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
+ static_cast<PMPrintSession>([print_info_ PMPrintSession]);
PMPrintSettings print_settings =
- static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]);
+ static_cast<PMPrintSettings>([print_info_ PMPrintSettings]);
return PMSessionSetDestination(print_session, print_settings,
kPMDestinationPreview, nullptr,
nullptr) == noErr;
@@ -228,9 +232,9 @@
void PrintingContextMac::InitPrintSettingsFromPrintInfo() {
PMPrintSession print_session =
- static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
+ static_cast<PMPrintSession>([print_info_ PMPrintSession]);
PMPageFormat page_format =
- static_cast<PMPageFormat>([print_info_.get() PMPageFormat]);
+ static_cast<PMPageFormat>([print_info_ PMPageFormat]);
PMPrinter printer;
PMSessionGetCurrentPrinter(print_session, &printer);
PrintSettingsInitializerMac::InitPrintSettings(printer, page_format,
@@ -238,9 +242,9 @@
}
bool PrintingContextMac::SetPrinter(const std::string& device_name) {
- DCHECK(print_info_.get());
+ DCHECK(print_info_);
PMPrintSession print_session =
- static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
+ static_cast<PMPrintSession>([print_info_ PMPrintSession]);
PMPrinter current_printer;
if (PMSessionGetCurrentPrinter(print_session, ¤t_printer) != noErr)
@@ -271,10 +275,10 @@
bool PrintingContextMac::UpdatePageFormatWithPaperInfo() {
PMPrintSession print_session =
- static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
+ static_cast<PMPrintSession>([print_info_ PMPrintSession]);
PMPageFormat default_page_format =
- static_cast<PMPageFormat>([print_info_.get() PMPageFormat]);
+ static_cast<PMPageFormat>([print_info_ PMPageFormat]);
PMPrinter current_printer = nullptr;
if (PMSessionGetCurrentPrinter(print_session, ¤t_printer) != noErr)
@@ -300,10 +304,10 @@
PMPaperGetMargins(default_paper, &margins);
paper_name.reset(tmp_paper_name, base::scoped_policy::RETAIN);
} else {
- const double kMutiplier =
+ const double kMultiplier =
kPointsPerInch / static_cast<float>(kMicronsPerInch);
- page_width = media.size_microns.width() * kMutiplier;
- page_height = media.size_microns.height() * kMutiplier;
+ page_width = media.size_microns.width() * kMultiplier;
+ page_height = media.size_microns.height() * kMultiplier;
paper_name.reset(base::SysUTF8ToCFStringRef(media.vendor_id));
}
@@ -339,7 +343,7 @@
return false;
// Copy over the original format with the new page format.
bool result = (PMCopyPageFormat(new_format, page_format) == noErr);
- [print_info_.get() updateFromPMPageFormat];
+ [print_info_ updateFromPMPageFormat];
PMRelease(new_format);
return result;
}
@@ -349,19 +353,19 @@
return false;
PMPrintSettings print_settings =
- static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]);
+ static_cast<PMPrintSettings>([print_info_ PMPrintSettings]);
return PMSetCopies(print_settings, copies, false) == noErr;
}
bool PrintingContextMac::SetCollateInPrintSettings(bool collate) {
PMPrintSettings print_settings =
- static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]);
+ static_cast<PMPrintSettings>([print_info_ PMPrintSettings]);
return PMSetCollate(print_settings, collate) == noErr;
}
bool PrintingContextMac::SetOrientationIsLandscape(bool landscape) {
PMPageFormat page_format =
- static_cast<PMPageFormat>([print_info_.get() PMPageFormat]);
+ static_cast<PMPageFormat>([print_info_ PMPageFormat]);
PMOrientation orientation = landscape ? kPMLandscape : kPMPortrait;
@@ -369,11 +373,11 @@
return false;
PMPrintSession print_session =
- static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
+ static_cast<PMPrintSession>([print_info_ PMPrintSession]);
PMSessionValidatePageFormat(print_session, page_format, kPMDontWantBoolean);
- [print_info_.get() updateFromPMPageFormat];
+ [print_info_ updateFromPMPageFormat];
return true;
}
@@ -394,7 +398,7 @@
}
PMPrintSettings print_settings =
- static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]);
+ static_cast<PMPrintSettings>([print_info_ PMPrintSettings]);
return PMSetDuplex(print_settings, duplexSetting) == noErr;
}
@@ -435,7 +439,7 @@
return true;
PMPrintSession print_session =
- static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
+ static_cast<PMPrintSession>([print_info_ PMPrintSession]);
PMPrinter current_printer;
if (PMSessionGetCurrentPrinter(print_session, ¤t_printer) != noErr)
return false;
@@ -445,7 +449,7 @@
resolution.vRes = dpi_size.height();
PMPrintSettings print_settings =
- static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]);
+ static_cast<PMPrintSettings>([print_info_ PMPrintSettings]);
return PMPrinterSetOutputResolution(current_printer, print_settings,
&resolution) == noErr;
}
@@ -453,10 +457,10 @@
bool PrintingContextMac::SetKeyValue(base::StringPiece key,
base::StringPiece value) {
PMPrintSettings print_settings =
- static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]);
- base::ScopedCFTypeRef<CFStringRef> cf_key(base::SysUTF8ToCFStringRef(key));
- base::ScopedCFTypeRef<CFStringRef> cf_value(
- base::SysUTF8ToCFStringRef(value));
+ static_cast<PMPrintSettings>([print_info_ PMPrintSettings]);
+ base::ScopedCFTypeRef<CFStringRef> cf_key = base::SysUTF8ToCFStringRef(key);
+ base::ScopedCFTypeRef<CFStringRef> cf_value =
+ base::SysUTF8ToCFStringRef(value);
return PMPrintSettingsSetValue(print_settings, cf_key.get(), cf_value.get(),
/*locked=*/false) == noErr;
@@ -464,7 +468,7 @@
PageRanges PrintingContextMac::GetPageRangesFromPrintInfo() {
PageRanges page_ranges;
- NSDictionary* print_info_dict = [print_info_.get() dictionary];
+ NSDictionary* print_info_dict = [print_info_ dictionary];
if (![print_info_dict[NSPrintAllPages] boolValue]) {
PageRange range;
range.from = [print_info_dict[NSPrintFirstPage] intValue] - 1;
@@ -484,14 +488,14 @@
return mojom::ResultCode::kSuccess;
PMPrintSession print_session =
- static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
+ static_cast<PMPrintSession>([print_info_ PMPrintSession]);
PMPrintSettings print_settings =
- static_cast<PMPrintSettings>([print_info_.get() PMPrintSettings]);
+ static_cast<PMPrintSettings>([print_info_ PMPrintSettings]);
PMPageFormat page_format =
- static_cast<PMPageFormat>([print_info_.get() PMPageFormat]);
+ static_cast<PMPageFormat>([print_info_ PMPageFormat]);
- base::ScopedCFTypeRef<CFStringRef> job_title(
- base::SysUTF16ToCFStringRef(document_name));
+ base::ScopedCFTypeRef<CFStringRef> job_title =
+ base::SysUTF16ToCFStringRef(document_name);
PMPrintSettingsSetJobName(print_settings, job_title.get());
OSStatus status = PMSessionBeginCGDocumentNoDialog(
@@ -509,9 +513,9 @@
DCHECK(!context_);
PMPrintSession print_session =
- static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
+ static_cast<PMPrintSession>([print_info_ PMPrintSession]);
PMPageFormat page_format =
- static_cast<PMPageFormat>([print_info_.get() PMPageFormat]);
+ static_cast<PMPageFormat>([print_info_ PMPageFormat]);
OSStatus status;
status = PMSessionBeginPageNoDialog(print_session, page_format, nullptr);
if (status != noErr)
@@ -530,7 +534,7 @@
DCHECK(context_);
PMPrintSession print_session =
- static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
+ static_cast<PMPrintSession>([print_info_ PMPrintSession]);
OSStatus status = PMSessionEndPageNoDialog(print_session);
if (status != noErr)
OnError();
@@ -568,7 +572,7 @@
DCHECK(in_print_job_);
PMPrintSession print_session =
- static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
+ static_cast<PMPrintSession>([print_info_ PMPrintSession]);
OSStatus status = PMSessionEndDocumentNoDialog(print_session);
if (status != noErr)
OnError();
@@ -583,12 +587,12 @@
context_ = nullptr;
PMPrintSession print_session =
- static_cast<PMPrintSession>([print_info_.get() PMPrintSession]);
+ static_cast<PMPrintSession>([print_info_ PMPrintSession]);
PMSessionEndPageNoDialog(print_session);
}
void PrintingContextMac::ReleaseContext() {
- print_info_.reset();
+ print_info_ = nil;
context_ = nullptr;
}