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

Unified Diff: chrome/common/sandbox_mac_fontloading_unittest.mm

Issue 2131005: Mac: Infrastructure for serialization of OS fonts over IPC. (Closed)
Patch Set: Better error logging Created 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/sandbox_mac_diraccess_unittest.mm ('k') | chrome/common/sandbox_mac_unittest_helper.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/sandbox_mac_fontloading_unittest.mm
diff --git a/chrome/common/sandbox_mac_fontloading_unittest.mm b/chrome/common/sandbox_mac_fontloading_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..9eadf0d57e6c4e27dd9e15a556105e0feeae677b
--- /dev/null
+++ b/chrome/common/sandbox_mac_fontloading_unittest.mm
@@ -0,0 +1,132 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import <Cocoa/Cocoa.h>
+
+#include "base/file_util.h"
+#include "base/logging.h"
+#include "base/scoped_cftyperef.h"
+#include "base/scoped_ptr.h"
+#include "base/shared_memory.h"
+#include "chrome/common/font_loader_mac.h"
+#include "chrome/common/sandbox_mac_unittest_helper.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+using sandboxtest::MacSandboxTest;
+
+class FontLoadingTestCase : public sandboxtest::MacSandboxTestCase {
+ public:
+ FontLoadingTestCase() : font_data_length_(-1) {}
+ virtual bool BeforeSandboxInit();
+ virtual bool SandboxedTest();
+ private:
+ scoped_ptr<base::SharedMemory> font_shmem_;
+ size_t font_data_length_;
+};
+REGISTER_SANDBOX_TEST_CASE(FontLoadingTestCase);
+
+
+// Load raw font data into shared memory object.
+bool FontLoadingTestCase::BeforeSandboxInit() {
+ std::string font_data;
+ if (!file_util::ReadFileToString(FilePath(test_data_.c_str()), &font_data)) {
+ LOG(ERROR) << "Failed to read font data from file (" << test_data_ << ")";
+ return false;
+ }
+
+ font_data_length_ = font_data.length();
+ if (font_data_length_ <= 0) {
+ LOG(ERROR) << "No font data: " << font_data_length_;
+ return false;
+ }
+
+ font_shmem_.reset(new base::SharedMemory);
+ if (!font_shmem_.get()) {
+ LOG(ERROR) << "Failed to create shared memory object.";
+ return false;
+ }
+
+ if (!font_shmem_->Create(L"", false, false, font_data_length_)) {
+ LOG(ERROR) << "SharedMemory::Create failed";
+ return false;
+ }
+
+ if (!font_shmem_->Map(font_data_length_)) {
+ LOG(ERROR) << "SharedMemory::Map failed";
+ return false;
+ }
+
+ memcpy(font_shmem_->memory(), font_data.c_str(), font_data_length_);
+ if (!font_shmem_->Unmap()) {
+ LOG(ERROR) << "SharedMemory::Unmap failed";
+ return false;
+ }
+ return true;
+}
+
+bool FontLoadingTestCase::SandboxedTest() {
+ base::SharedMemoryHandle shmem_handle;
+ if (!font_shmem_->ShareToProcess(NULL, &shmem_handle)) {
+ LOG(ERROR) << "SharedMemory::ShareToProcess failed";
+ return false;
+ }
+
+ CGFontRef font_ref;
+ if (!FontLoader::CreateCGFontFromBuffer(shmem_handle, font_data_length_,
+ &font_ref)) {
+ LOG(ERROR) << "Call to CreateCGFontFromBuffer() failed";
+ return false;
+ }
+
+ scoped_cftyperef<CGFontRef> cgfont;
+
+ if (!font_ref) {
+ LOG(ERROR) << "Got NULL CGFontRef";
+ return false;
+ }
+ cgfont.reset(font_ref);
+
+ const NSFont* nsfont = reinterpret_cast<const NSFont*>(
+ CTFontCreateWithGraphicsFont(cgfont.get(), 16.0,
+ NULL, NULL));
+ if (!nsfont) {
+ LOG(ERROR) << "CTFontCreateWithGraphicsFont() failed";
+ return false;
+ }
+
+ // Do something with the font to make sure it's loaded.
+ CGFloat cap_height = [nsfont capHeight];
+
+ if (cap_height <= 0.0) {
+ LOG(ERROR) << "Got bad value for [NSFont capHeight] " << cap_height;
+ return false;
+ }
+
+ return true;
+}
+
+TEST_F(MacSandboxTest, FontLoadingTest) {
+ FilePath temp_file_path;
+ FILE* temp_file = file_util::CreateAndOpenTemporaryFile(&temp_file_path);
+ ASSERT_TRUE(temp_file);
+ file_util::ScopedFILE temp_file_closer(temp_file);
+
+ base::SharedMemory font_data;
+ uint32 font_data_size;
+ EXPECT_TRUE(FontLoader::LoadFontIntoBuffer(ASCIIToUTF16("Geeza Pro"), 16.0,
+ &font_data, &font_data_size));
+ EXPECT_GT(font_data_size, 0U);
+
+ file_util::WriteFileDescriptor(fileno(temp_file),
+ static_cast<const char *>(font_data.memory()), font_data_size);
+
+ ASSERT_TRUE(RunTestInSandbox(sandbox::SANDBOX_TYPE_RENDERER,
+ "FontLoadingTestCase", temp_file_path.value().c_str()));
+ temp_file_closer.reset();
+ ASSERT_TRUE(file_util::Delete(temp_file_path, false));
+}
+
+} // namespace
« no previous file with comments | « chrome/common/sandbox_mac_diraccess_unittest.mm ('k') | chrome/common/sandbox_mac_unittest_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698