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

Side by Side Diff: ui/gfx/test/icc_profiles.cc

Issue 2615523002: Merge all test ICC profiles to one location (Closed)
Patch Set: Fix ImageDecodeBench Created 3 years, 11 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 | « ui/gfx/test/icc_profiles.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 2016 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 "content/public/test/layouttest_support.h" 5 #include "ui/gfx/test/icc_profiles.h"
6 6
7 #include <stddef.h> 7 namespace gfx {
8 #include <utility>
9
10 #include "base/callback.h"
11 #include "base/lazy_instance.h"
12 #include "base/memory/ptr_util.h"
13 #include "base/strings/string_util.h"
14 #include "base/threading/thread_task_runner_handle.h"
15 #include "build/build_config.h"
16 #include "cc/output/copy_output_request.h"
17 #include "cc/test/pixel_test_output_surface.h"
18 #include "cc/test/test_compositor_frame_sink.h"
19 #include "components/test_runner/test_common.h"
20 #include "components/test_runner/web_frame_test_proxy.h"
21 #include "components/test_runner/web_view_test_proxy.h"
22 #include "components/test_runner/web_widget_test_proxy.h"
23 #include "content/browser/bluetooth/bluetooth_device_chooser_controller.h"
24 #include "content/browser/renderer_host/render_process_host_impl.h"
25 #include "content/browser/renderer_host/render_widget_host_impl.h"
26 #include "content/common/renderer.mojom.h"
27 #include "content/common/site_isolation_policy.h"
28 #include "content/public/common/page_state.h"
29 #include "content/public/renderer/renderer_gamepad_provider.h"
30 #include "content/renderer/fetchers/manifest_fetcher.h"
31 #include "content/renderer/gpu/render_widget_compositor.h"
32 #include "content/renderer/history_entry.h"
33 #include "content/renderer/history_serialization.h"
34 #include "content/renderer/input/render_widget_input_handler_delegate.h"
35 #include "content/renderer/layout_test_dependencies.h"
36 #include "content/renderer/render_frame_impl.h"
37 #include "content/renderer/render_thread_impl.h"
38 #include "content/renderer/render_view_impl.h"
39 #include "content/renderer/render_widget.h"
40 #include "content/renderer/renderer_blink_platform_impl.h"
41 #include "content/shell/common/shell_switches.h"
42 #include "gpu/ipc/service/image_transport_surface.h"
43 #include "services/ui/public/cpp/gpu/context_provider_command_buffer.h"
44 #include "third_party/WebKit/public/platform/WebFloatRect.h"
45 #include "third_party/WebKit/public/platform/WebGamepads.h"
46 #include "third_party/WebKit/public/platform/WebInputEvent.h"
47 #include "third_party/WebKit/public/platform/WebRect.h"
48 #include "third_party/WebKit/public/platform/modules/device_orientation/WebDevic eMotionData.h"
49 #include "third_party/WebKit/public/platform/modules/device_orientation/WebDevic eOrientationData.h"
50 #include "third_party/WebKit/public/platform/scheduler/test/renderer_scheduler_t est_support.h"
51 #include "third_party/WebKit/public/web/WebHistoryItem.h"
52 #include "third_party/WebKit/public/web/WebView.h"
53 #include "ui/events/blink/blink_event_util.h"
54 #include "ui/gfx/geometry/vector2d.h"
55 #include "ui/gfx/icc_profile.h"
56
57 #if defined(OS_MACOSX)
58 #include "content/browser/frame_host/popup_menu_helper_mac.h"
59 #elif defined(OS_WIN)
60 #include "content/child/font_warmup_win.h"
61 #include "third_party/WebKit/public/web/win/WebFontRendering.h"
62 #include "third_party/skia/include/ports/SkFontMgr.h"
63 #include "third_party/skia/include/ports/SkTypeface_win.h"
64 #include "ui/gfx/win/direct_write.h"
65 #endif
66
67 using blink::WebDeviceMotionData;
68 using blink::WebDeviceOrientationData;
69 using blink::WebGamepad;
70 using blink::WebGamepads;
71 using blink::WebRect;
72 using blink::WebSize;
73
74 namespace content {
75 8
76 namespace { 9 namespace {
77 10
78 base::LazyInstance<ViewProxyCreationCallback>::Leaky 11 const unsigned char generic_rgb_profile_data[] = {
79 g_view_test_proxy_callback = LAZY_INSTANCE_INITIALIZER;
80
81 base::LazyInstance<WidgetProxyCreationCallback>::Leaky
82 g_widget_test_proxy_callback = LAZY_INSTANCE_INITIALIZER;
83
84 base::LazyInstance<FrameProxyCreationCallback>::Leaky
85 g_frame_test_proxy_callback = LAZY_INSTANCE_INITIALIZER;
86
87 using WebViewTestProxyType =
88 test_runner::WebViewTestProxy<RenderViewImpl,
89 CompositorDependencies*,
90 const mojom::CreateViewParams&>;
91 using WebWidgetTestProxyType =
92 test_runner::WebWidgetTestProxy<RenderWidget,
93 int32_t,
94 CompositorDependencies*,
95 blink::WebPopupType,
96 const ScreenInfo&,
97 bool,
98 bool,
99 bool>;
100 using WebFrameTestProxyType =
101 test_runner::WebFrameTestProxy<RenderFrameImpl,
102 const RenderFrameImpl::CreateParams&>;
103
104 RenderViewImpl* CreateWebViewTestProxy(CompositorDependencies* compositor_deps,
105 const mojom::CreateViewParams& params) {
106 WebViewTestProxyType* render_view_proxy =
107 new WebViewTestProxyType(compositor_deps, params);
108 if (g_view_test_proxy_callback == 0)
109 return render_view_proxy;
110 g_view_test_proxy_callback.Get().Run(render_view_proxy, render_view_proxy);
111 return render_view_proxy;
112 }
113
114 RenderWidget* CreateWebWidgetTestProxy(int32_t routing_id,
115 CompositorDependencies* compositor_deps,
116 blink::WebPopupType popup_type,
117 const ScreenInfo& screen_info,
118 bool swapped_out,
119 bool hidden,
120 bool never_visible) {
121 WebWidgetTestProxyType* render_widget_proxy = new WebWidgetTestProxyType(
122 routing_id, compositor_deps, popup_type, screen_info, swapped_out, hidden,
123 never_visible);
124 return render_widget_proxy;
125 }
126
127 void RenderWidgetInitialized(RenderWidget* render_widget) {
128 WebWidgetTestProxyType* render_widget_proxy =
129 static_cast<WebWidgetTestProxyType*>(render_widget);
130 if (!g_widget_test_proxy_callback.Get().is_null()) {
131 g_widget_test_proxy_callback.Get().Run(render_widget->GetWebWidget(),
132 render_widget_proxy);
133 }
134 }
135
136 RenderFrameImpl* CreateWebFrameTestProxy(
137 const RenderFrameImpl::CreateParams& params) {
138 WebFrameTestProxyType* render_frame_proxy = new WebFrameTestProxyType(params);
139 if (g_frame_test_proxy_callback == 0)
140 return render_frame_proxy;
141 g_frame_test_proxy_callback.Get().Run(render_frame_proxy, render_frame_proxy);
142 return render_frame_proxy;
143 }
144
145 float GetWindowToViewportScale(RenderWidget* render_widget) {
146 blink::WebFloatRect rect(0, 0, 1.0f, 0.0);
147 render_widget->convertWindowToViewport(&rect);
148 return rect.width;
149 }
150
151 #if defined(OS_WIN)
152 // DirectWrite only has access to %WINDIR%\Fonts by default. For developer
153 // side-loading, support kRegisterFontFiles to allow access to additional fonts.
154 void RegisterSideloadedTypefaces(SkFontMgr* fontmgr) {
155 std::vector<std::string> files = switches::GetSideloadFontFiles();
156 for (std::vector<std::string>::const_iterator i(files.begin());
157 i != files.end();
158 ++i) {
159 SkTypeface* typeface = fontmgr->createFromFile(i->c_str());
160 blink::WebFontRendering::addSideloadedFontForTesting(typeface);
161 }
162 }
163 #endif // OS_WIN
164
165 } // namespace
166
167 test_runner::WebViewTestProxyBase* GetWebViewTestProxyBase(
168 RenderView* render_view) {
169 WebViewTestProxyType* render_view_proxy =
170 static_cast<WebViewTestProxyType*>(render_view);
171 return static_cast<test_runner::WebViewTestProxyBase*>(render_view_proxy);
172 }
173
174 test_runner::WebFrameTestProxyBase* GetWebFrameTestProxyBase(
175 RenderFrame* render_frame) {
176 WebFrameTestProxyType* render_frame_proxy =
177 static_cast<WebFrameTestProxyType*>(render_frame);
178 return static_cast<test_runner::WebFrameTestProxyBase*>(render_frame_proxy);
179 }
180
181 test_runner::WebWidgetTestProxyBase* GetWebWidgetTestProxyBase(
182 blink::WebLocalFrame* frame) {
183 DCHECK(frame);
184 RenderFrame* local_root = RenderFrame::FromWebFrame(frame->localRoot());
185 DCHECK(local_root);
186 // TODO(lfg): Simplify once RenderView no longer inherits from RenderWidget.
187 if (local_root->IsMainFrame()) {
188 test_runner::WebViewTestProxyBase* web_view_test_proxy_base =
189 GetWebViewTestProxyBase(local_root->GetRenderView());
190 auto* web_widget_test_proxy_base =
191 static_cast<test_runner::WebWidgetTestProxyBase*>(
192 web_view_test_proxy_base);
193 DCHECK(web_widget_test_proxy_base->web_widget()->isWebView());
194 return web_widget_test_proxy_base;
195 } else {
196 RenderWidget* render_widget =
197 static_cast<RenderFrameImpl*>(local_root)->GetRenderWidget();
198 DCHECK(render_widget);
199 WebWidgetTestProxyType* render_widget_proxy =
200 static_cast<WebWidgetTestProxyType*>(render_widget);
201 auto* web_widget_test_proxy_base =
202 static_cast<test_runner::WebWidgetTestProxyBase*>(render_widget_proxy);
203 DCHECK(web_widget_test_proxy_base->web_widget()->isWebFrameWidget());
204 return web_widget_test_proxy_base;
205 }
206 }
207
208 RenderWidget* GetRenderWidget(
209 test_runner::WebWidgetTestProxyBase* web_widget_test_proxy_base) {
210 DCHECK(web_widget_test_proxy_base);
211
212 blink::WebWidget* widget = web_widget_test_proxy_base->web_widget();
213 // TODO(lfg): Simplify once RenderView no longer inherits from RenderWidget.
214 if (widget->isWebView()) {
215 WebViewTestProxyType* render_view_proxy =
216 static_cast<WebViewTestProxyType*>(web_widget_test_proxy_base);
217 RenderViewImpl* render_view_impl =
218 static_cast<RenderViewImpl*>(render_view_proxy);
219 return render_view_impl;
220 } else if (widget->isWebFrameWidget()) {
221 WebWidgetTestProxyType* render_widget_proxy =
222 static_cast<WebWidgetTestProxyType*>(web_widget_test_proxy_base);
223 return static_cast<RenderWidget*>(render_widget_proxy);
224 } else {
225 NOTREACHED();
226 return nullptr;
227 }
228 }
229
230 void EnableWebTestProxyCreation(
231 const ViewProxyCreationCallback& view_proxy_creation_callback,
232 const WidgetProxyCreationCallback& widget_proxy_creation_callback,
233 const FrameProxyCreationCallback& frame_proxy_creation_callback) {
234 g_view_test_proxy_callback.Get() = view_proxy_creation_callback;
235 g_widget_test_proxy_callback.Get() = widget_proxy_creation_callback;
236 g_frame_test_proxy_callback.Get() = frame_proxy_creation_callback;
237 RenderViewImpl::InstallCreateHook(CreateWebViewTestProxy);
238 RenderWidget::InstallCreateHook(CreateWebWidgetTestProxy,
239 RenderWidgetInitialized);
240 RenderFrameImpl::InstallCreateHook(CreateWebFrameTestProxy);
241 }
242
243 void FetchManifestDoneCallback(std::unique_ptr<ManifestFetcher> fetcher,
244 const FetchManifestCallback& callback,
245 const blink::WebURLResponse& response,
246 const std::string& data) {
247 // |fetcher| will be autodeleted here as it is going out of scope.
248 callback.Run(response, data);
249 }
250
251 void FetchManifest(blink::WebView* view, const GURL& url,
252 const FetchManifestCallback& callback) {
253 ManifestFetcher* fetcher = new ManifestFetcher(url);
254 std::unique_ptr<ManifestFetcher> autodeleter(fetcher);
255
256 // Start is called on fetcher which is also bound to the callback.
257 // A raw pointer is used instead of a scoped_ptr as base::Passes passes
258 // ownership and thus nulls the scoped_ptr. On MSVS this happens before
259 // the call to Start, resulting in a crash.
260 fetcher->Start(view->mainFrame(),
261 false,
262 base::Bind(&FetchManifestDoneCallback,
263 base::Passed(&autodeleter),
264 callback));
265 }
266
267 void SetMockGamepadProvider(std::unique_ptr<RendererGamepadProvider> provider) {
268 RenderThreadImpl::current()
269 ->blink_platform_impl()
270 ->SetPlatformEventObserverForTesting(blink::WebPlatformEventTypeGamepad,
271 std::move(provider));
272 }
273
274 void SetMockDeviceLightData(const double data) {
275 RendererBlinkPlatformImpl::SetMockDeviceLightDataForTesting(data);
276 }
277
278 void SetMockDeviceMotionData(const WebDeviceMotionData& data) {
279 RendererBlinkPlatformImpl::SetMockDeviceMotionDataForTesting(data);
280 }
281
282 void SetMockDeviceOrientationData(const WebDeviceOrientationData& data) {
283 RendererBlinkPlatformImpl::SetMockDeviceOrientationDataForTesting(data);
284 }
285
286 namespace {
287
288 // Invokes a callback on commit (on the main thread) to obtain the output
289 // surface that should be used, then asks that output surface to submit the copy
290 // request at SwapBuffers time.
291 class CopyRequestSwapPromise : public cc::SwapPromise {
292 public:
293 using FindCompositorFrameSinkCallback =
294 base::Callback<cc::TestCompositorFrameSink*()>;
295 CopyRequestSwapPromise(
296 std::unique_ptr<cc::CopyOutputRequest> request,
297 FindCompositorFrameSinkCallback find_compositor_frame_sink_callback)
298 : copy_request_(std::move(request)),
299 find_compositor_frame_sink_callback_(
300 std::move(find_compositor_frame_sink_callback)) {}
301
302 // cc::SwapPromise implementation.
303 void OnCommit() override {
304 compositor_frame_sink_from_commit_ =
305 find_compositor_frame_sink_callback_.Run();
306 DCHECK(compositor_frame_sink_from_commit_);
307 }
308 void DidActivate() override {}
309 void WillSwap(cc::CompositorFrameMetadata*) override {
310 compositor_frame_sink_from_commit_->RequestCopyOfOutput(
311 std::move(copy_request_));
312 }
313 void DidSwap() override {}
314 DidNotSwapAction DidNotSwap(DidNotSwapReason r) override {
315 // The compositor should always swap in layout test mode.
316 NOTREACHED() << "did not swap for reason " << r;
317 return DidNotSwapAction::BREAK_PROMISE;
318 }
319 int64_t TraceId() const override { return 0; }
320
321 private:
322 std::unique_ptr<cc::CopyOutputRequest> copy_request_;
323 FindCompositorFrameSinkCallback find_compositor_frame_sink_callback_;
324 cc::TestCompositorFrameSink* compositor_frame_sink_from_commit_ = nullptr;
325 };
326
327 } // namespace
328
329 class LayoutTestDependenciesImpl : public LayoutTestDependencies,
330 public cc::TestCompositorFrameSinkClient {
331 public:
332 std::unique_ptr<cc::CompositorFrameSink> CreateCompositorFrameSink(
333 int32_t routing_id,
334 scoped_refptr<gpu::GpuChannelHost> gpu_channel,
335 scoped_refptr<cc::ContextProvider> compositor_context_provider,
336 scoped_refptr<cc::ContextProvider> worker_context_provider,
337 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
338 CompositorDependencies* deps) override {
339 // This could override the GpuChannel for a CompositorFrameSink that was
340 // previously being created but in that case the old GpuChannel would be
341 // lost as would the CompositorFrameSink.
342 gpu_channel_ = gpu_channel;
343
344 auto* task_runner = deps->GetCompositorImplThreadTaskRunner().get();
345 bool synchronous_composite = !task_runner;
346 if (!task_runner)
347 task_runner = base::ThreadTaskRunnerHandle::Get().get();
348
349 cc::LayerTreeSettings settings =
350 RenderWidgetCompositor::GenerateLayerTreeSettings(
351 *base::CommandLine::ForCurrentProcess(), deps, 1.f);
352
353 auto compositor_frame_sink = base::MakeUnique<cc::TestCompositorFrameSink>(
354 std::move(compositor_context_provider),
355 std::move(worker_context_provider), nullptr /* shared_bitmap_manager */,
356 gpu_memory_buffer_manager, settings.renderer_settings, task_runner,
357 synchronous_composite, false /* force_disable_reclaim_resources */);
358 compositor_frame_sink->SetClient(this);
359 compositor_frame_sinks_[routing_id] = compositor_frame_sink.get();
360 return std::move(compositor_frame_sink);
361 }
362
363 std::unique_ptr<cc::SwapPromise> RequestCopyOfOutput(
364 int32_t routing_id,
365 std::unique_ptr<cc::CopyOutputRequest> request) override {
366 // Note that we can't immediately check compositor_frame_sinks_, since it
367 // may not have been created yet. Instead, we wait until OnCommit to find
368 // the currently active CompositorFrameSink for the given RenderWidget
369 // routing_id.
370 return base::MakeUnique<CopyRequestSwapPromise>(
371 std::move(request),
372 base::Bind(
373 &LayoutTestDependenciesImpl::FindCompositorFrameSink,
374 // |this| will still be valid, because its lifetime is tied to
375 // RenderThreadImpl, which outlives layout test execution.
376 base::Unretained(this), routing_id));
377 }
378
379 // TestCompositorFrameSinkClient implementation.
380 std::unique_ptr<cc::OutputSurface> CreateDisplayOutputSurface(
381 scoped_refptr<cc::ContextProvider> compositor_context_provider) override {
382 // This is for an offscreen context for the compositor. So the default
383 // framebuffer doesn't need alpha, depth, stencil, antialiasing.
384 gpu::gles2::ContextCreationAttribHelper attributes;
385 attributes.alpha_size = -1;
386 attributes.depth_size = 0;
387 attributes.stencil_size = 0;
388 attributes.samples = 0;
389 attributes.sample_buffers = 0;
390 attributes.bind_generates_resource = false;
391 attributes.lose_context_when_out_of_memory = true;
392 const bool automatic_flushes = false;
393 const bool support_locking = false;
394
395 auto context_provider =
396 make_scoped_refptr(new ui::ContextProviderCommandBuffer(
397 gpu_channel_, gpu::GPU_STREAM_DEFAULT,
398 gpu::GpuStreamPriority::NORMAL, gpu::kNullSurfaceHandle,
399 GURL("chrome://gpu/"
400 "LayoutTestDependenciesImpl::CreateOutputSurface"),
401 automatic_flushes, support_locking, gpu::SharedMemoryLimits(),
402 attributes, nullptr,
403 ui::command_buffer_metrics::OFFSCREEN_CONTEXT_FOR_TESTING));
404 context_provider->BindToCurrentThread();
405
406 bool flipped_output_surface = false;
407 return base::MakeUnique<cc::PixelTestOutputSurface>(
408 std::move(context_provider), flipped_output_surface);
409 }
410 void DisplayReceivedCompositorFrame(
411 const cc::CompositorFrame& frame) override {}
412 void DisplayWillDrawAndSwap(
413 bool will_draw_and_swap,
414 const cc::RenderPassList& render_passes) override {}
415 void DisplayDidDrawAndSwap() override {}
416
417 private:
418 cc::TestCompositorFrameSink* FindCompositorFrameSink(int32_t routing_id) {
419 auto it = compositor_frame_sinks_.find(routing_id);
420 return it == compositor_frame_sinks_.end() ? nullptr : it->second;
421 }
422
423 // Entries are not removed, so this map can grow. However, it is only used in
424 // layout tests, so this memory usage does not occur in production.
425 // Entries in this map will outlive the output surface, because this object is
426 // owned by RenderThreadImpl, which outlives layout test execution.
427 std::unordered_map<int32_t, cc::TestCompositorFrameSink*>
428 compositor_frame_sinks_;
429 scoped_refptr<gpu::GpuChannelHost> gpu_channel_;
430 };
431
432 void EnableRendererLayoutTestMode() {
433 RenderThreadImpl::current()->set_layout_test_dependencies(
434 base::MakeUnique<LayoutTestDependenciesImpl>());
435
436 #if defined(OS_WIN)
437 RegisterSideloadedTypefaces(SkFontMgr_New_DirectWrite());
438 #endif
439 }
440
441 void EnableBrowserLayoutTestMode() {
442 #if defined(OS_MACOSX)
443 gpu::ImageTransportSurface::SetAllowOSMesaForTesting(true);
444 PopupMenuHelper::DontShowPopupMenuForTesting();
445 #endif
446 RenderWidgetHostImpl::DisableResizeAckCheckForTesting();
447 }
448
449 int GetLocalSessionHistoryLength(RenderView* render_view) {
450 return static_cast<RenderViewImpl*>(render_view)->
451 GetLocalSessionHistoryLengthForTesting();
452 }
453
454 void SyncNavigationState(RenderView* render_view) {
455 // TODO(creis): Add support for testing in OOPIF-enabled modes.
456 // See https://crbug.com/477150.
457 if (SiteIsolationPolicy::UseSubframeNavigationEntries())
458 return;
459 static_cast<RenderViewImpl*>(render_view)->SendUpdateState();
460 }
461
462 void SetFocusAndActivate(RenderView* render_view, bool enable) {
463 static_cast<RenderViewImpl*>(render_view)->
464 SetFocusAndActivateForTesting(enable);
465 }
466
467 void ForceResizeRenderView(RenderView* render_view,
468 const WebSize& new_size) {
469 RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view);
470 render_view_impl->ForceResizeForTesting(new_size);
471 }
472
473 void SetDeviceScaleFactor(RenderView* render_view, float factor) {
474 static_cast<RenderViewImpl*>(render_view)->
475 SetDeviceScaleFactorForTesting(factor);
476 }
477
478 float GetWindowToViewportScale(RenderView* render_view) {
479 return GetWindowToViewportScale(
480 static_cast<RenderViewImpl*>(render_view)->GetWidget());
481 }
482
483 std::unique_ptr<blink::WebInputEvent> TransformScreenToWidgetCoordinates(
484 test_runner::WebWidgetTestProxyBase* web_widget_test_proxy_base,
485 const blink::WebInputEvent& event) {
486 DCHECK(web_widget_test_proxy_base);
487 RenderWidget* render_widget = GetRenderWidget(web_widget_test_proxy_base);
488
489 blink::WebRect view_rect = render_widget->viewRect();
490 float scale = GetWindowToViewportScale(render_widget);
491 gfx::Vector2d delta(-view_rect.x, -view_rect.y);
492 return ui::TranslateAndScaleWebInputEvent(event, delta, scale);
493 }
494
495 gfx::ICCProfile GetTestingICCProfile(const std::string& name) {
496 const unsigned char rgb_profile_data[] = {
497 0x00, 0x00, 0x07, 0xd8, 0x61, 0x70, 0x70, 0x6c, 0x02, 0x20, 0x00, 0x00, 12 0x00, 0x00, 0x07, 0xd8, 0x61, 0x70, 0x70, 0x6c, 0x02, 0x20, 0x00, 0x00,
498 0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20, 13 0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20,
499 0x07, 0xd9, 0x00, 0x02, 0x00, 0x19, 0x00, 0x0b, 0x00, 0x1a, 0x00, 0x0b, 14 0x07, 0xd9, 0x00, 0x02, 0x00, 0x19, 0x00, 0x0b, 0x00, 0x1a, 0x00, 0x0b,
500 0x61, 0x63, 0x73, 0x70, 0x41, 0x50, 0x50, 0x4c, 0x00, 0x00, 0x00, 0x00, 15 0x61, 0x63, 0x73, 0x70, 0x41, 0x50, 0x50, 0x4c, 0x00, 0x00, 0x00, 0x00,
501 0x61, 0x70, 0x70, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 16 0x61, 0x70, 0x70, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
502 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6, 17 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6,
503 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x61, 0x70, 0x70, 0x6c, 18 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x61, 0x70, 0x70, 0x6c,
504 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 19 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
505 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 20 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
506 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 21 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 0x00, 0x01, 0x16, 0xcf, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 169 0x00, 0x01, 0x16, 0xcf, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00,
655 0x00, 0x00, 0x74, 0x4d, 0x00, 0x00, 0x3d, 0xee, 0x00, 0x00, 0x03, 0xd0, 170 0x00, 0x00, 0x74, 0x4d, 0x00, 0x00, 0x3d, 0xee, 0x00, 0x00, 0x03, 0xd0,
656 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x75, 171 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x75,
657 0x00, 0x00, 0xac, 0x73, 0x00, 0x00, 0x17, 0x34, 0x58, 0x59, 0x5a, 0x20, 172 0x00, 0x00, 0xac, 0x73, 0x00, 0x00, 0x17, 0x34, 0x58, 0x59, 0x5a, 0x20,
658 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1a, 0x00, 0x00, 0x15, 0x9f, 173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1a, 0x00, 0x00, 0x15, 0x9f,
659 0x00, 0x00, 0xb8, 0x36, 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 174 0x00, 0x00, 0xb8, 0x36, 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00,
660 0x00, 0x00, 0x00, 0x01, 0x01, 0xcd, 0x00, 0x00, 0x73, 0x66, 0x33, 0x32, 175 0x00, 0x00, 0x00, 0x01, 0x01, 0xcd, 0x00, 0x00, 0x73, 0x66, 0x33, 0x32,
661 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x42, 0x00, 0x00, 0x05, 0xde, 176 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x42, 0x00, 0x00, 0x05, 0xde,
662 0xff, 0xff, 0xf3, 0x26, 0x00, 0x00, 0x07, 0x92, 0x00, 0x00, 0xfd, 0x91, 177 0xff, 0xff, 0xf3, 0x26, 0x00, 0x00, 0x07, 0x92, 0x00, 0x00, 0xfd, 0x91,
663 0xff, 0xff, 0xfb, 0xa2, 0xff, 0xff, 0xfd, 0xa3, 0x00, 0x00, 0x03, 0xdc, 178 0xff, 0xff, 0xfb, 0xa2, 0xff, 0xff, 0xfd, 0xa3, 0x00, 0x00, 0x03, 0xdc,
664 0x00, 0x00, 0xc0, 0x6c 179 0x00, 0x00, 0xc0, 0x6c};
665 };
666 180
667 const unsigned char srgb_profile_data[] = { 181 const unsigned char srgb_profile_data[] = {
668 0x00, 0x00, 0x0c, 0x48, 0x4c, 0x69, 0x6e, 0x6f, 0x02, 0x10, 0x00, 0x00, 182 0x00, 0x00, 0x0c, 0x48, 0x4c, 0x69, 0x6e, 0x6f, 0x02, 0x10, 0x00, 0x00,
669 0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20, 183 0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20,
670 0x07, 0xce, 0x00, 0x02, 0x00, 0x09, 0x00, 0x06, 0x00, 0x31, 0x00, 0x00, 184 0x07, 0xce, 0x00, 0x02, 0x00, 0x09, 0x00, 0x06, 0x00, 0x31, 0x00, 0x00,
671 0x61, 0x63, 0x73, 0x70, 0x4d, 0x53, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00, 185 0x61, 0x63, 0x73, 0x70, 0x4d, 0x53, 0x46, 0x54, 0x00, 0x00, 0x00, 0x00,
672 0x49, 0x45, 0x43, 0x20, 0x73, 0x52, 0x47, 0x42, 0x00, 0x00, 0x00, 0x00, 186 0x49, 0x45, 0x43, 0x20, 0x73, 0x52, 0x47, 0x42, 0x00, 0x00, 0x00, 0x00,
673 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6, 187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6,
674 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x48, 0x50, 0x20, 0x20, 188 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x48, 0x50, 0x20, 0x20,
675 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 189 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
676 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 190 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
677 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 191 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 0xdc, 0x8a, 0xdd, 0x10, 0xdd, 0x96, 0xde, 0x1c, 0xde, 0xa2, 0xdf, 0x29, 433 0xdc, 0x8a, 0xdd, 0x10, 0xdd, 0x96, 0xde, 0x1c, 0xde, 0xa2, 0xdf, 0x29,
920 0xdf, 0xaf, 0xe0, 0x36, 0xe0, 0xbd, 0xe1, 0x44, 0xe1, 0xcc, 0xe2, 0x53, 434 0xdf, 0xaf, 0xe0, 0x36, 0xe0, 0xbd, 0xe1, 0x44, 0xe1, 0xcc, 0xe2, 0x53,
921 0xe2, 0xdb, 0xe3, 0x63, 0xe3, 0xeb, 0xe4, 0x73, 0xe4, 0xfc, 0xe5, 0x84, 435 0xe2, 0xdb, 0xe3, 0x63, 0xe3, 0xeb, 0xe4, 0x73, 0xe4, 0xfc, 0xe5, 0x84,
922 0xe6, 0x0d, 0xe6, 0x96, 0xe7, 0x1f, 0xe7, 0xa9, 0xe8, 0x32, 0xe8, 0xbc, 436 0xe6, 0x0d, 0xe6, 0x96, 0xe7, 0x1f, 0xe7, 0xa9, 0xe8, 0x32, 0xe8, 0xbc,
923 0xe9, 0x46, 0xe9, 0xd0, 0xea, 0x5b, 0xea, 0xe5, 0xeb, 0x70, 0xeb, 0xfb, 437 0xe9, 0x46, 0xe9, 0xd0, 0xea, 0x5b, 0xea, 0xe5, 0xeb, 0x70, 0xeb, 0xfb,
924 0xec, 0x86, 0xed, 0x11, 0xed, 0x9c, 0xee, 0x28, 0xee, 0xb4, 0xef, 0x40, 438 0xec, 0x86, 0xed, 0x11, 0xed, 0x9c, 0xee, 0x28, 0xee, 0xb4, 0xef, 0x40,
925 0xef, 0xcc, 0xf0, 0x58, 0xf0, 0xe5, 0xf1, 0x72, 0xf1, 0xff, 0xf2, 0x8c, 439 0xef, 0xcc, 0xf0, 0x58, 0xf0, 0xe5, 0xf1, 0x72, 0xf1, 0xff, 0xf2, 0x8c,
926 0xf3, 0x19, 0xf3, 0xa7, 0xf4, 0x34, 0xf4, 0xc2, 0xf5, 0x50, 0xf5, 0xde, 440 0xf3, 0x19, 0xf3, 0xa7, 0xf4, 0x34, 0xf4, 0xc2, 0xf5, 0x50, 0xf5, 0xde,
927 0xf6, 0x6d, 0xf6, 0xfb, 0xf7, 0x8a, 0xf8, 0x19, 0xf8, 0xa8, 0xf9, 0x38, 441 0xf6, 0x6d, 0xf6, 0xfb, 0xf7, 0x8a, 0xf8, 0x19, 0xf8, 0xa8, 0xf9, 0x38,
928 0xf9, 0xc7, 0xfa, 0x57, 0xfa, 0xe7, 0xfb, 0x77, 0xfc, 0x07, 0xfc, 0x98, 442 0xf9, 0xc7, 0xfa, 0x57, 0xfa, 0xe7, 0xfb, 0x77, 0xfc, 0x07, 0xfc, 0x98,
929 0xfd, 0x29, 0xfd, 0xba, 0xfe, 0x4b, 0xfe, 0xdc, 0xff, 0x6d, 0xff, 0xff 443 0xfd, 0x29, 0xfd, 0xba, 0xfe, 0x4b, 0xfe, 0xdc, 0xff, 0x6d, 0xff, 0xff};
930 };
931 444
932 const unsigned char colorspin_profile_data[] = { 445 const unsigned char colorspin_profile_data[] = {
933 0x00, 0x00, 0x01, 0xea, 0x54, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 446 0x00, 0x00, 0x01, 0xea, 0x54, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00,
934 0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20, 447 0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20,
935 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 448 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
936 0x61, 0x63, 0x73, 0x70, 0x74, 0x65, 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 449 0x61, 0x63, 0x73, 0x70, 0x74, 0x65, 0x73, 0x74, 0x00, 0x00, 0x00, 0x00,
937 0x74, 0x65, 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 450 0x74, 0x65, 0x73, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
938 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6, 451 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6,
939 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x74, 0x65, 0x73, 0x74, 452 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x74, 0x65, 0x73, 0x74,
940 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 453 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
941 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 454 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
942 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 455 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
(...skipping 20 matching lines...) Expand all
963 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 476 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
964 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 477 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
965 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 478 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
966 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0x52, 479 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0x52,
967 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x16, 0xcc, 0x58, 0x59, 0x5a, 0x20, 480 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x16, 0xcc, 0x58, 0x59, 0x5a, 0x20,
968 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x8d, 0x00, 0x00, 0xa0, 0x2c, 481 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x8d, 0x00, 0x00, 0xa0, 0x2c,
969 0x00, 0x00, 0x0f, 0x95, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 482 0x00, 0x00, 0x0f, 0x95, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00,
970 0x00, 0x00, 0x26, 0x31, 0x00, 0x00, 0x10, 0x2f, 0x00, 0x00, 0xbe, 0x9b, 483 0x00, 0x00, 0x26, 0x31, 0x00, 0x00, 0x10, 0x2f, 0x00, 0x00, 0xbe, 0x9b,
971 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x18, 484 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x18,
972 0x00, 0x00, 0x4f, 0xa5, 0x00, 0x00, 0x04, 0xfc, 0x63, 0x75, 0x72, 0x76, 485 0x00, 0x00, 0x4f, 0xa5, 0x00, 0x00, 0x04, 0xfc, 0x63, 0x75, 0x72, 0x76,
973 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x33 486 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x33};
974 };
975 487
976 const unsigned char adobe_rgb_profile_data[] = { 488 const unsigned char adobe_rgb_profile_data[] = {
977 0x00, 0x00, 0x02, 0x30, 0x41, 0x44, 0x42, 0x45, 0x02, 0x10, 0x00, 0x00, 489 0x00, 0x00, 0x02, 0x30, 0x41, 0x44, 0x42, 0x45, 0x02, 0x10, 0x00, 0x00,
978 0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20, 490 0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20,
979 0x07, 0xd0, 0x00, 0x08, 0x00, 0x0b, 0x00, 0x13, 0x00, 0x33, 0x00, 0x3b, 491 0x07, 0xd0, 0x00, 0x08, 0x00, 0x0b, 0x00, 0x13, 0x00, 0x33, 0x00, 0x3b,
980 0x61, 0x63, 0x73, 0x70, 0x41, 0x50, 0x50, 0x4c, 0x00, 0x00, 0x00, 0x00, 492 0x61, 0x63, 0x73, 0x70, 0x41, 0x50, 0x50, 0x4c, 0x00, 0x00, 0x00, 0x00,
981 0x6e, 0x6f, 0x6e, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 493 0x6e, 0x6f, 0x6e, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
982 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6, 494 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6,
983 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x41, 0x44, 0x42, 0x45, 495 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x41, 0x44, 0x42, 0x45,
984 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 496 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
985 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 497 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
986 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 498 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
(...skipping 26 matching lines...) Expand all
1013 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 525 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1014 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x75, 0x72, 0x76, 526 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x75, 0x72, 0x76,
1015 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x33, 0x00, 0x00, 527 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x33, 0x00, 0x00,
1016 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 528 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
1017 0x02, 0x33, 0x00, 0x00, 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00, 529 0x02, 0x33, 0x00, 0x00, 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, 0x00, 0x00,
1018 0x00, 0x00, 0x00, 0x01, 0x02, 0x33, 0x00, 0x00, 0x58, 0x59, 0x5a, 0x20, 530 0x00, 0x00, 0x00, 0x01, 0x02, 0x33, 0x00, 0x00, 0x58, 0x59, 0x5a, 0x20,
1019 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x18, 0x00, 0x00, 0x4f, 0xa5, 531 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x18, 0x00, 0x00, 0x4f, 0xa5,
1020 0x00, 0x00, 0x04, 0xfc, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 532 0x00, 0x00, 0x04, 0xfc, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00,
1021 0x00, 0x00, 0x34, 0x8d, 0x00, 0x00, 0xa0, 0x2c, 0x00, 0x00, 0x0f, 0x95, 533 0x00, 0x00, 0x34, 0x8d, 0x00, 0x00, 0xa0, 0x2c, 0x00, 0x00, 0x0f, 0x95,
1022 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x31, 534 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x31,
1023 0x00, 0x00, 0x10, 0x2f, 0x00, 0x00, 0xbe, 0x9c 535 0x00, 0x00, 0x10, 0x2f, 0x00, 0x00, 0xbe, 0x9c};
1024 };
1025
1026 const unsigned char* data = nullptr;
1027 size_t size = 0;
1028 if (name == "genericRGB") {
1029 data = rgb_profile_data;
1030 size = sizeof(rgb_profile_data);
1031 } else if (name == "sRGB") {
1032 data = srgb_profile_data;
1033 size = sizeof(srgb_profile_data);
1034 } else if (name == "test" || name == "colorSpin") {
1035 data = colorspin_profile_data;
1036 size = sizeof(colorspin_profile_data);
1037 } else if (name == "adobeRGB") {
1038 data = adobe_rgb_profile_data;
1039 size = sizeof(adobe_rgb_profile_data);
1040 }
1041
1042 if (data)
1043 return gfx::ICCProfile::FromData(reinterpret_cast<const char*>(data), size);
1044 return gfx::ICCProfile();
1045 } 536 }
1046 537
1047 void SetDeviceColorProfile( 538 ICCProfile ICCProfileForTestingAdobeRGB() {
1048 RenderView* render_view, const gfx::ICCProfile& icc_profile) { 539 return ICCProfile::FromData(
1049 static_cast<RenderViewImpl*>(render_view) 540 reinterpret_cast<const char*>(adobe_rgb_profile_data),
1050 ->GetWidget() 541 arraysize(adobe_rgb_profile_data));
1051 ->SetDeviceColorProfileForTesting(icc_profile.GetData());
1052 } 542 }
1053 543
1054 void SetTestBluetoothScanDuration() { 544 ICCProfile ICCProfileForTestingGenericRGB() {
1055 BluetoothDeviceChooserController::SetTestScanDurationForTesting(); 545 return ICCProfile::FromData(
546 reinterpret_cast<const char*>(generic_rgb_profile_data),
547 arraysize(generic_rgb_profile_data));
1056 } 548 }
1057 549
1058 void UseSynchronousResizeMode(RenderView* render_view, bool enable) { 550 ICCProfile ICCProfileForTestingSRGB() {
1059 static_cast<RenderViewImpl*>(render_view)-> 551 return ICCProfile::FromData(reinterpret_cast<const char*>(srgb_profile_data),
1060 UseSynchronousResizeModeForTesting(enable); 552 arraysize(srgb_profile_data));
1061 } 553 }
1062 554
1063 void EnableAutoResizeMode(RenderView* render_view, 555 ICCProfile ICCProfileForTestingColorSpin() {
1064 const WebSize& min_size, 556 return ICCProfile::FromData(
1065 const WebSize& max_size) { 557 reinterpret_cast<const char*>(colorspin_profile_data),
1066 static_cast<RenderViewImpl*>(render_view)-> 558 arraysize(colorspin_profile_data));
1067 EnableAutoResizeForTesting(min_size, max_size);
1068 } 559 }
1069 560
1070 void DisableAutoResizeMode(RenderView* render_view, const WebSize& new_size) { 561 } // namespace gfx
1071 static_cast<RenderViewImpl*>(render_view)->
1072 DisableAutoResizeForTesting(new_size);
1073 }
1074
1075 // Returns True if node1 < node2.
1076 bool HistoryEntryCompareLess(HistoryEntry::HistoryNode* node1,
1077 HistoryEntry::HistoryNode* node2) {
1078 base::string16 target1 = node1->item().target();
1079 base::string16 target2 = node2->item().target();
1080 return base::CompareCaseInsensitiveASCII(target1, target2) < 0;
1081 }
1082
1083 std::string DumpHistoryItem(HistoryEntry::HistoryNode* node,
1084 int indent,
1085 bool is_current_index) {
1086 std::string result;
1087
1088 const blink::WebHistoryItem& item = node->item();
1089 if (is_current_index) {
1090 result.append("curr->");
1091 result.append(indent - 6, ' '); // 6 == "curr->".length()
1092 } else {
1093 result.append(indent, ' ');
1094 }
1095
1096 std::string url =
1097 test_runner::NormalizeLayoutTestURL(item.urlString().utf8());
1098 result.append(url);
1099 if (!item.target().isEmpty()) {
1100 result.append(" (in frame \"");
1101 result.append(item.target().utf8());
1102 result.append("\")");
1103 }
1104 result.append("\n");
1105
1106 std::vector<HistoryEntry::HistoryNode*> children = node->children();
1107 if (!children.empty()) {
1108 std::sort(children.begin(), children.end(), HistoryEntryCompareLess);
1109 for (size_t i = 0; i < children.size(); ++i)
1110 result += DumpHistoryItem(children[i], indent + 4, false);
1111 }
1112
1113 return result;
1114 }
1115
1116 std::string DumpBackForwardList(std::vector<PageState>& page_state,
1117 size_t current_index) {
1118 std::string result;
1119 result.append("\n============== Back Forward List ==============\n");
1120 for (size_t index = 0; index < page_state.size(); ++index) {
1121 std::unique_ptr<HistoryEntry> entry(
1122 PageStateToHistoryEntry(page_state[index]));
1123 result.append(
1124 DumpHistoryItem(entry->root_history_node(),
1125 8,
1126 index == current_index));
1127 }
1128 result.append("===============================================\n");
1129 return result;
1130 }
1131
1132 void SchedulerRunIdleTasks(const base::Closure& callback) {
1133 blink::scheduler::RendererScheduler* scheduler =
1134 content::RenderThreadImpl::current()->GetRendererScheduler();
1135 blink::scheduler::RunIdleTasksForTesting(scheduler, callback);
1136 }
1137
1138 void ForceTextInputStateUpdateForRenderFrame(RenderFrame* frame) {
1139 if (auto* render_widget =
1140 static_cast<RenderFrameImpl*>(frame)->GetRenderWidget()) {
1141 render_widget->UpdateTextInputState(ShowIme::IF_NEEDED,
1142 ChangeSource::FROM_NON_IME);
1143 }
1144 }
1145
1146 } // namespace content
OLDNEW
« no previous file with comments | « ui/gfx/test/icc_profiles.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698