diff --git a/DEPS b/DEPS index 29f96e2..8a52f04 100644 --- a/DEPS +++ b/DEPS
@@ -40,7 +40,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'dabe8acb7f89806dc6808d3ce913dc3d190c7e81', + 'skia_revision': 'bd1f76fecf0e45d0d7a1d8502efa958818bc57c3', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -64,7 +64,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '2b63ae28236f71e4df9c26b66cfca2905ceec512', + 'pdfium_revision': '42059a389449665cdd4056648f9551103bb9c72e', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling openmax_dl # and whatever else without interference from each other. @@ -232,7 +232,7 @@ Var('chromium_git') + '/native_client/src/third_party/scons-2.0.1.git' + '@' + '1c1550e17fc26355d08627fbdec13d8291227067', 'src/third_party/webrtc': - Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + '09307e531e9b0302b2c36686d9e9c6854d2d6996', # commit position 17210 + Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + '7867a4ee6b46931789aae005f33823ed250ae52d', # commit position 17226 'src/third_party/openmax_dl': Var('chromium_git') + '/external/webrtc/deps/third_party/openmax.git' + '@' + Var('openmax_dl_revision'), @@ -363,7 +363,7 @@ Var('chromium_git') + '/external/github.com/swisspol/GCDWebServer.git' + '@' + '43555c66627f6ed44817855a0f6d465f559d30e0', 'src/ios/third_party/material_components_ios/src': - Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '6740cb50df612112a937a4d3f4f4bd88ef2f32d5', + Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '45f079e80193bb5153874b6aea882ea8b30dc017', 'src/ios/third_party/material_font_disk_loader_ios/src': Var('chromium_git') + '/external/github.com/material-foundation/material-font-disk-loader-ios.git' + '@' + '8e30188777b016182658fbaa0a4a020a48183224',
diff --git a/base/allocator/allocator_shim_internals.h b/base/allocator/allocator_shim_internals.h index 82624ee..0196f89 100644 --- a/base/allocator/allocator_shim_internals.h +++ b/base/allocator/allocator_shim_internals.h
@@ -18,7 +18,26 @@ #endif // Shim layer symbols need to be ALWAYS exported, regardless of component build. -#define SHIM_ALWAYS_EXPORT __attribute__((visibility("default"))) +// +// If an exported symbol is linked into a DSO, it may be preempted by a +// definition in the main executable. If this happens to an allocator symbol, it +// will mean that the DSO will use the main executable's allocator. This is +// normally relatively harmless -- regular allocations should all use the same +// allocator, but if the DSO tries to hook the allocator it will not see any +// allocations. +// +// However, if LLVM LTO is enabled, the compiler may inline the shim layer +// symbols into callers. The end result is that allocator calls in DSOs may use +// either the main executable's allocator or the DSO's allocator, depending on +// whether the call was inlined. This is arguably a bug in LLVM caused by its +// somewhat irregular handling of symbol interposition (see llvm.org/PR23501). +// To work around the bug we use noinline to prevent the symbols from being +// inlined. +// +// In the long run we probably want to avoid linking the allocator bits into +// DSOs altogether. This will save a little space and stop giving DSOs the false +// impression that they can hook the allocator. +#define SHIM_ALWAYS_EXPORT __attribute__((visibility("default"), noinline)) #endif // __GNUC__
diff --git a/base/allocator/allocator_shim_override_glibc_weak_symbols.h b/base/allocator/allocator_shim_override_glibc_weak_symbols.h index b1296369..7f50ac8 100644 --- a/base/allocator/allocator_shim_override_glibc_weak_symbols.h +++ b/base/allocator/allocator_shim_override_glibc_weak_symbols.h
@@ -56,23 +56,21 @@ } // namespace -SHIM_ALWAYS_EXPORT void* (*MALLOC_HOOK_MAYBE_VOLATILE __malloc_hook)( - size_t, - const void*) = &GlibcMallocHook; +__attribute__((visibility("default"))) void* ( + *MALLOC_HOOK_MAYBE_VOLATILE __malloc_hook)(size_t, + const void*) = &GlibcMallocHook; -SHIM_ALWAYS_EXPORT void* (*MALLOC_HOOK_MAYBE_VOLATILE __realloc_hook)( - void*, - size_t, - const void*) = &GlibcReallocHook; +__attribute__((visibility("default"))) void* ( + *MALLOC_HOOK_MAYBE_VOLATILE __realloc_hook)(void*, size_t, const void*) = + &GlibcReallocHook; -SHIM_ALWAYS_EXPORT void (*MALLOC_HOOK_MAYBE_VOLATILE __free_hook)(void*, - const void*) = - &GlibcFreeHook; +__attribute__((visibility("default"))) void ( + *MALLOC_HOOK_MAYBE_VOLATILE __free_hook)(void*, + const void*) = &GlibcFreeHook; -SHIM_ALWAYS_EXPORT void* (*MALLOC_HOOK_MAYBE_VOLATILE __memalign_hook)( - size_t, - size_t, - const void*) = &GlibcMemalignHook; +__attribute__((visibility("default"))) void* ( + *MALLOC_HOOK_MAYBE_VOLATILE __memalign_hook)(size_t, size_t, const void*) = + &GlibcMemalignHook; // 2) Redefine libc symbols themselves.
diff --git a/base/allocator/partition_allocator/page_allocator.cc b/base/allocator/partition_allocator/page_allocator.cc index 1884c469..606155f 100644 --- a/base/allocator/partition_allocator/page_allocator.cc +++ b/base/allocator/partition_allocator/page_allocator.cc
@@ -6,8 +6,9 @@ #include <limits.h> +#include <atomic> + #include "base/allocator/partition_allocator/address_space_randomization.h" -#include "base/atomicops.h" #include "base/base_export.h" #include "base/logging.h" #include "build/build_config.h" @@ -27,7 +28,7 @@ // On POSIX |mmap| uses a nearby address if the hint address is blocked. static const bool kHintIsAdvisory = true; -static volatile base::subtle::Atomic32 s_allocPageErrorCode = 0; +static std::atomic<int32_t> s_allocPageErrorCode{0}; #elif defined(OS_WIN) @@ -35,7 +36,7 @@ // |VirtualAlloc| will fail if allocation at the hint address is blocked. static const bool kHintIsAdvisory = false; -static base::subtle::Atomic32 s_allocPageErrorCode = ERROR_SUCCESS; +static std::atomic<int32_t> s_allocPageErrorCode{ERROR_SUCCESS}; #else #error Unknown OS @@ -58,14 +59,14 @@ page_accessibility == PageAccessible ? PAGE_READWRITE : PAGE_NOACCESS; ret = VirtualAlloc(hint, length, MEM_RESERVE | MEM_COMMIT, access_flag); if (!ret) - base::subtle::Release_Store(&s_allocPageErrorCode, GetLastError()); + s_allocPageErrorCode = GetLastError(); #else int access_flag = page_accessibility == PageAccessible ? (PROT_READ | PROT_WRITE) : PROT_NONE; ret = mmap(hint, length, access_flag, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); if (ret == MAP_FAILED) { - base::subtle::Release_Store(&s_allocPageErrorCode, errno); + s_allocPageErrorCode = errno; ret = 0; } #endif @@ -272,7 +273,7 @@ } uint32_t GetAllocPageErrorCode() { - return base::subtle::Acquire_Load(&s_allocPageErrorCode); + return s_allocPageErrorCode; } } // namespace base
diff --git a/base/allocator/partition_allocator/partition_alloc.cc b/base/allocator/partition_allocator/partition_alloc.cc index bd3823e0..37d2633 100644 --- a/base/allocator/partition_allocator/partition_alloc.cc +++ b/base/allocator/partition_allocator/partition_alloc.cc
@@ -1319,11 +1319,13 @@ static const size_t kMaxReportableDirectMaps = 4096; - // A heap allocation rather than on the stack to avoid stack overflows - // skirmishes (on Windows, in particular.) - uint32_t* direct_map_lengths = nullptr; - if (!is_light_dump) - direct_map_lengths = new uint32_t[kMaxReportableDirectMaps]; + // Allocate on the heap rather than on the stack to avoid stack overflow + // skirmishes (on Windows, in particular). + std::unique_ptr<uint32_t[]> direct_map_lengths = nullptr; + if (!is_light_dump) { + direct_map_lengths = + std::unique_ptr<uint32_t[]>(new uint32_t[kMaxReportableDirectMaps]); + } PartitionBucketMemoryStats bucket_stats[kGenericNumBuckets]; size_t num_direct_mapped_allocations = 0; @@ -1383,7 +1385,6 @@ stats.resident_bytes = size; dumper->PartitionsDumpBucketStats(partition_name, &stats); } - delete[] direct_map_lengths; } stats.total_resident_bytes += direct_mapped_allocations_total_size;
diff --git a/base/task_scheduler/priority_queue.cc b/base/task_scheduler/priority_queue.cc index cfe71ea8..fe03381 100644 --- a/base/task_scheduler/priority_queue.cc +++ b/base/task_scheduler/priority_queue.cc
@@ -95,11 +95,6 @@ PriorityQueue::PriorityQueue() = default; -PriorityQueue::PriorityQueue(const PriorityQueue* predecessor_priority_queue) - : container_lock_(&predecessor_priority_queue->container_lock_) { - DCHECK(predecessor_priority_queue); -} - PriorityQueue::~PriorityQueue() = default; std::unique_ptr<PriorityQueue::Transaction> PriorityQueue::BeginTransaction() {
diff --git a/base/task_scheduler/priority_queue.h b/base/task_scheduler/priority_queue.h index 8875793..2844ef3 100644 --- a/base/task_scheduler/priority_queue.h +++ b/base/task_scheduler/priority_queue.h
@@ -70,11 +70,6 @@ PriorityQueue(); - // |predecessor_priority_queue| is a PriorityQueue for which a thread is - // allowed to have an active Transaction when it creates a Transaction for - // this PriorityQueue. - PriorityQueue(const PriorityQueue* predecessor_priority_queue); - ~PriorityQueue(); // Begins a Transaction. This method cannot be called on a thread which has an
diff --git a/base/task_scheduler/priority_queue_unittest.cc b/base/task_scheduler/priority_queue_unittest.cc index 37628560..221532b6 100644 --- a/base/task_scheduler/priority_queue_unittest.cc +++ b/base/task_scheduler/priority_queue_unittest.cc
@@ -141,19 +141,6 @@ }); } -// Check that there is no crash when Transactions are created on the same thread -// for 2 PriorityQueues which have a predecessor relationship. -TEST(TaskSchedulerPriorityQueueTest, LegalTwoTransactionsSameThread) { - PriorityQueue pq_a; - PriorityQueue pq_b(&pq_a); - - // This shouldn't crash. - std::unique_ptr<PriorityQueue::Transaction> transaction_a = - pq_a.BeginTransaction(); - std::unique_ptr<PriorityQueue::Transaction> transaction_b = - pq_b.BeginTransaction(); -} - // Check that it is possible to begin multiple Transactions for the same // PriorityQueue on different threads. The call to BeginTransaction() on the // second thread should block until the Transaction has ended on the first
diff --git a/base/task_scheduler/scheduler_worker_pool.h b/base/task_scheduler/scheduler_worker_pool.h index c742ac3..f7a8908 100644 --- a/base/task_scheduler/scheduler_worker_pool.h +++ b/base/task_scheduler/scheduler_worker_pool.h
@@ -10,7 +10,6 @@ #include "base/base_export.h" #include "base/memory/ref_counted.h" #include "base/sequenced_task_runner.h" -#include "base/single_thread_task_runner.h" #include "base/task_runner.h" #include "base/task_scheduler/sequence.h" #include "base/task_scheduler/task.h" @@ -19,7 +18,6 @@ namespace base { namespace internal { -class SchedulerWorker; class SequenceSortKey; // Interface for a worker pool. @@ -39,12 +37,6 @@ virtual scoped_refptr<SequencedTaskRunner> CreateSequencedTaskRunnerWithTraits(const TaskTraits& traits) = 0; - // Returns a SingleThreadTaskRunner whose PostTask invocations result in - // scheduling tasks in this SchedulerWorkerPool using |traits|. Tasks run on a - // single thread in posting order. - virtual scoped_refptr<SingleThreadTaskRunner> - CreateSingleThreadTaskRunnerWithTraits(const TaskTraits& traits) = 0; - // Inserts |sequence| with |sequence_sort_key| into a queue of Sequences that // can be processed by any worker owned by this SchedulerWorkerPool. Must only // be used to put |sequence| back into a queue after running a Task from it. @@ -54,24 +46,16 @@ const SequenceSortKey& sequence_sort_key) = 0; // Posts |task| to be executed by this SchedulerWorkerPool as part of - // |sequence|. If |worker| is non-null, |task| will be scheduled to run on it - // specifically (note: |worker| must be owned by this SchedulerWorkerPool); - // otherwise, |task| will be added to the pending shared work. |task| won't be - // executed before its delayed run time, if any. Returns true if |task| is - // posted. + // |sequence|. |task| won't be executed before its delayed run time, if any. + // Returns true if |task| is posted. virtual bool PostTaskWithSequence(std::unique_ptr<Task> task, - scoped_refptr<Sequence> sequence, - SchedulerWorker* worker) = 0; + scoped_refptr<Sequence> sequence) = 0; // Posts |task| to be executed by this SchedulerWorkerPool as part of - // |sequence|. If |worker| is non-null, |task| will be scheduled to run on it - // specifically (note: |worker| must be owned by this SchedulerWorkerPool); - // otherwise, |task| will be added to the pending shared work. This must only - // be called after |task| has gone through PostTaskWithSequence() and after - // |task|'s delayed run time. + // |sequence|. This must only be called after |task| has gone through + // PostTaskWithSequence() and after |task|'s delayed run time. virtual void PostTaskWithSequenceNow(std::unique_ptr<Task> task, - scoped_refptr<Sequence> sequence, - SchedulerWorker* worker) = 0; + scoped_refptr<Sequence> sequence) = 0; }; } // namespace internal
diff --git a/base/task_scheduler/scheduler_worker_pool_impl.cc b/base/task_scheduler/scheduler_worker_pool_impl.cc index 9a6a20b..56e1f7b5 100644 --- a/base/task_scheduler/scheduler_worker_pool_impl.cc +++ b/base/task_scheduler/scheduler_worker_pool_impl.cc
@@ -17,7 +17,6 @@ #include "base/metrics/histogram.h" #include "base/sequence_token.h" #include "base/sequenced_task_runner.h" -#include "base/single_thread_task_runner.h" #include "base/strings/stringprintf.h" #include "base/task_runner.h" #include "base/task_scheduler/delayed_task_manager.h" @@ -64,7 +63,7 @@ // Post the task as part of a one-off single-task Sequence. return worker_pool_->PostTaskWithSequence( MakeUnique<Task>(from_here, closure, traits_, delay), - make_scoped_refptr(new Sequence), nullptr); + make_scoped_refptr(new Sequence)); } bool RunsTasksOnCurrentThread() const override { @@ -100,8 +99,7 @@ task->sequenced_task_runner_ref = this; // Post the task as part of |sequence_|. - return worker_pool_->PostTaskWithSequence(std::move(task), sequence_, - nullptr); + return worker_pool_->PostTaskWithSequence(std::move(task), sequence_); } bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, @@ -141,78 +139,19 @@ } // namespace -// TODO(http://crbug.com/694823): Remove this and supporting framework. -// A task runner that runs tasks with the SINGLE_THREADED ExecutionMode. -class SchedulerWorkerPoolImpl::SchedulerSingleThreadTaskRunner : - public SingleThreadTaskRunner { - public: - // Constructs a SchedulerSingleThreadTaskRunner which can be used to post - // tasks so long as |worker_pool| and |worker| are alive. - // TODO(robliao): Find a concrete way to manage the memory of |worker_pool| - // and |worker|. - SchedulerSingleThreadTaskRunner(const TaskTraits& traits, - SchedulerWorkerPool* worker_pool, - SchedulerWorker* worker); - - // SingleThreadTaskRunner: - bool PostDelayedTask(const tracked_objects::Location& from_here, - const Closure& closure, - TimeDelta delay) override { - std::unique_ptr<Task> task(new Task(from_here, closure, traits_, delay)); - task->single_thread_task_runner_ref = this; - - // Post the task to be executed by |worker_| as part of |sequence_|. - return worker_pool_->PostTaskWithSequence(std::move(task), sequence_, - worker_); - } - - bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, - const Closure& closure, - base::TimeDelta delay) override { - // Tasks are never nested within the task scheduler. - return PostDelayedTask(from_here, closure, delay); - } - - bool RunsTasksOnCurrentThread() const override { - // Even though this is a SingleThreadTaskRunner, test the actual sequence - // instead of the assigned worker so that another task randomly assigned - // to the same worker doesn't return true by happenstance. - return sequence_->token() == SequenceToken::GetForCurrentThread(); - } - - private: - ~SchedulerSingleThreadTaskRunner() override; - - // Sequence for all Tasks posted through this TaskRunner. - const scoped_refptr<Sequence> sequence_ = new Sequence; - - const TaskTraits traits_; - SchedulerWorkerPool* const worker_pool_; - SchedulerWorker* const worker_; - - DISALLOW_COPY_AND_ASSIGN(SchedulerSingleThreadTaskRunner); -}; - class SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl : public SchedulerWorker::Delegate { public: // |outer| owns the worker for which this delegate is constructed. // |re_enqueue_sequence_callback| is invoked when ReEnqueueSequence() is - // called with a non-single-threaded Sequence. |shared_priority_queue| is a - // PriorityQueue whose transactions may overlap with the worker's - // single-threaded PriorityQueue's transactions. |index| will be appended to - // the pool name to label the underlying worker threads. + // called. |index| will be appended to the pool name to label the underlying + // worker threads. SchedulerWorkerDelegateImpl( SchedulerWorkerPoolImpl* outer, const ReEnqueueSequenceCallback& re_enqueue_sequence_callback, - const PriorityQueue* shared_priority_queue, int index); ~SchedulerWorkerDelegateImpl() override; - PriorityQueue* single_threaded_priority_queue() { - return &single_threaded_priority_queue_; - } - // SchedulerWorker::Delegate: void OnMainEntry(SchedulerWorker* worker) override; scoped_refptr<Sequence> GetWork(SchedulerWorker* worker) override; @@ -222,28 +161,10 @@ bool CanDetach(SchedulerWorker* worker) override; void OnDetach() override; - void RegisterSingleThreadTaskRunner() { - // No barrier as barriers only affect sequential consistency which is - // irrelevant in a single variable use case (they don't force an immediate - // flush anymore than atomics do by default). - subtle::NoBarrier_AtomicIncrement(&num_single_threaded_runners_, 1); - } - - void UnregisterSingleThreadTaskRunner() { - subtle::NoBarrier_AtomicIncrement(&num_single_threaded_runners_, -1); - } - private: SchedulerWorkerPoolImpl* outer_; const ReEnqueueSequenceCallback re_enqueue_sequence_callback_; - // Single-threaded PriorityQueue for the worker. - PriorityQueue single_threaded_priority_queue_; - - // True if the last Sequence returned by GetWork() was extracted from - // |single_threaded_priority_queue_|. - bool last_sequence_is_single_threaded_ = false; - // Time of the last detach. TimeTicks last_detach_time_; @@ -265,8 +186,6 @@ // TaskScheduler.NumTasksBeforeDetach histogram was recorded. size_t num_tasks_since_last_detach_ = 0; - subtle::Atomic32 num_single_threaded_runners_ = 0; - const int index_; DISALLOW_COPY_AND_ASSIGN(SchedulerWorkerDelegateImpl); @@ -302,21 +221,6 @@ return make_scoped_refptr(new SchedulerSequencedTaskRunner(traits, this)); } -scoped_refptr<SingleThreadTaskRunner> -SchedulerWorkerPoolImpl::CreateSingleThreadTaskRunnerWithTraits( - const TaskTraits& traits) { - // TODO(fdoray): Find a way to take load into account when assigning a - // SchedulerWorker to a SingleThreadTaskRunner. - size_t worker_index; - { - AutoSchedulerLock auto_lock(next_worker_index_lock_); - worker_index = next_worker_index_; - next_worker_index_ = (next_worker_index_ + 1) % workers_.size(); - } - return make_scoped_refptr(new SchedulerSingleThreadTaskRunner( - traits, this, workers_[worker_index].get())); -} - void SchedulerWorkerPoolImpl::ReEnqueueSequence( scoped_refptr<Sequence> sequence, const SequenceSortKey& sequence_sort_key) { @@ -337,27 +241,25 @@ bool SchedulerWorkerPoolImpl::PostTaskWithSequence( std::unique_ptr<Task> task, - scoped_refptr<Sequence> sequence, - SchedulerWorker* worker) { + scoped_refptr<Sequence> sequence) { DCHECK(task); DCHECK(sequence); - DCHECK(!worker || ContainsWorker(workers_, worker)); if (!task_tracker_->WillPostTask(task.get())) return false; if (task->delayed_run_time.is_null()) { - PostTaskWithSequenceNow(std::move(task), std::move(sequence), worker); + PostTaskWithSequenceNow(std::move(task), std::move(sequence)); } else { delayed_task_manager_->AddDelayedTask( std::move(task), Bind( - [](scoped_refptr<Sequence> sequence, SchedulerWorker* worker, + [](scoped_refptr<Sequence> sequence, SchedulerWorkerPool* worker_pool, std::unique_ptr<Task> task) { worker_pool->PostTaskWithSequenceNow(std::move(task), - std::move(sequence), worker); + std::move(sequence)); }, - std::move(sequence), Unretained(worker), Unretained(this))); + std::move(sequence), Unretained(this))); } return true; @@ -365,42 +267,27 @@ void SchedulerWorkerPoolImpl::PostTaskWithSequenceNow( std::unique_ptr<Task> task, - scoped_refptr<Sequence> sequence, - SchedulerWorker* worker) { + scoped_refptr<Sequence> sequence) { DCHECK(task); DCHECK(sequence); - DCHECK(!worker || ContainsWorker(workers_, worker)); // Confirm that |task| is ready to run (its delayed run time is either null or // in the past). DCHECK_LE(task->delayed_run_time, TimeTicks::Now()); - // Because |worker| belongs to this worker pool, we know that the type - // of its delegate is SchedulerWorkerDelegateImpl. - PriorityQueue* const priority_queue = - worker - ? static_cast<SchedulerWorkerDelegateImpl*>(worker->delegate()) - ->single_threaded_priority_queue() - : &shared_priority_queue_; - DCHECK(priority_queue); - const bool sequence_was_empty = sequence->PushTask(std::move(task)); if (sequence_was_empty) { - // Insert |sequence| in |priority_queue| if it was empty before |task| was - // inserted into it. Otherwise, one of these must be true: - // - |sequence| is already in a PriorityQueue (not necessarily - // |shared_priority_queue_|), or, + // Insert |sequence| in |shared_priority_queue_| if it was empty before + // |task| was inserted into it. Otherwise, one of these must be true: + // - |sequence| is already in a PriorityQueue, or, // - A worker is running a Task from |sequence|. It will insert |sequence| // in a PriorityQueue once it's done running the Task. const auto sequence_sort_key = sequence->GetSortKey(); - priority_queue->BeginTransaction()->Push(std::move(sequence), - sequence_sort_key); + shared_priority_queue_.BeginTransaction()->Push(std::move(sequence), + sequence_sort_key); // Wake up a worker to process |sequence|. - if (worker) - WakeUpWorker(worker); - else - WakeUpOneWorker(); + WakeUpOneWorker(); } } @@ -443,34 +330,13 @@ return num_alive_workers; } -SchedulerWorkerPoolImpl::SchedulerSingleThreadTaskRunner:: - SchedulerSingleThreadTaskRunner(const TaskTraits& traits, - SchedulerWorkerPool* worker_pool, - SchedulerWorker* worker) - : traits_(traits), - worker_pool_(worker_pool), - worker_(worker) { - DCHECK(worker_pool_); - DCHECK(worker_); - static_cast<SchedulerWorkerDelegateImpl*>(worker_->delegate())-> - RegisterSingleThreadTaskRunner(); -} - -SchedulerWorkerPoolImpl::SchedulerSingleThreadTaskRunner:: - ~SchedulerSingleThreadTaskRunner() { - static_cast<SchedulerWorkerDelegateImpl*>(worker_->delegate())-> - UnregisterSingleThreadTaskRunner(); -} - SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl:: SchedulerWorkerDelegateImpl( SchedulerWorkerPoolImpl* outer, const ReEnqueueSequenceCallback& re_enqueue_sequence_callback, - const PriorityQueue* shared_priority_queue, int index) : outer_(outer), re_enqueue_sequence_callback_(re_enqueue_sequence_callback), - single_threaded_priority_queue_(shared_priority_queue), index_(index) {} SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl:: @@ -528,13 +394,8 @@ { std::unique_ptr<PriorityQueue::Transaction> shared_transaction( outer_->shared_priority_queue_.BeginTransaction()); - std::unique_ptr<PriorityQueue::Transaction> single_threaded_transaction( - single_threaded_priority_queue_.BeginTransaction()); - if (shared_transaction->IsEmpty() && - single_threaded_transaction->IsEmpty()) { - single_threaded_transaction.reset(); - + if (shared_transaction->IsEmpty()) { // |shared_transaction| is kept alive while |worker| is added to // |idle_workers_stack_| to avoid this race: // 1. This thread creates a Transaction, finds |shared_priority_queue_| @@ -555,23 +416,7 @@ return nullptr; } - // True if both PriorityQueues have Sequences and the Sequence at the top of - // the shared PriorityQueue is more important. - const bool shared_sequence_is_more_important = - !shared_transaction->IsEmpty() && - !single_threaded_transaction->IsEmpty() && - shared_transaction->PeekSortKey() > - single_threaded_transaction->PeekSortKey(); - - if (single_threaded_transaction->IsEmpty() || - shared_sequence_is_more_important) { - sequence = shared_transaction->PopSequence(); - last_sequence_is_single_threaded_ = false; - } else { - DCHECK(!single_threaded_transaction->IsEmpty()); - sequence = single_threaded_transaction->PopSequence(); - last_sequence_is_single_threaded_ = true; - } + sequence = shared_transaction->PopSequence(); } DCHECK(sequence); @@ -590,17 +435,9 @@ void SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl:: ReEnqueueSequence(scoped_refptr<Sequence> sequence) { - if (last_sequence_is_single_threaded_) { - // A single-threaded Sequence is always re-enqueued in the single-threaded - // PriorityQueue from which it was extracted. - const SequenceSortKey sequence_sort_key = sequence->GetSortKey(); - single_threaded_priority_queue_.BeginTransaction()->Push( - std::move(sequence), sequence_sort_key); - } else { - // |re_enqueue_sequence_callback_| will determine in which PriorityQueue - // |sequence| must be enqueued. - re_enqueue_sequence_callback_.Run(std::move(sequence)); - } + // |re_enqueue_sequence_callback_| will determine in which PriorityQueue + // |sequence| must be enqueued. + re_enqueue_sequence_callback_.Run(std::move(sequence)); } TimeDelta SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl:: @@ -610,15 +447,10 @@ bool SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::CanDetach( SchedulerWorker* worker) { - // It's not an issue if |num_single_threaded_runners_| is incremented after - // this because the newly created SingleThreadTaskRunner (from which no task - // has run yet) will simply run all its tasks on the next physical thread - // created by the worker. const bool can_detach = !idle_start_time_.is_null() && (TimeTicks::Now() - idle_start_time_) > outer_->suggested_reclaim_time_ && worker != outer_->PeekAtIdleWorkersStack() && - !subtle::NoBarrier_Load(&num_single_threaded_runners_) && outer_->CanWorkerDetachForTesting(); return can_detach; } @@ -700,7 +532,7 @@ scoped_refptr<SchedulerWorker> worker = SchedulerWorker::Create( params.priority_hint(), MakeUnique<SchedulerWorkerDelegateImpl>( - this, re_enqueue_sequence_callback, &shared_priority_queue_, index), + this, re_enqueue_sequence_callback, index), task_tracker_, initial_state, params.backward_compatibility()); if (!worker) break; @@ -715,14 +547,6 @@ return !workers_.empty(); } -void SchedulerWorkerPoolImpl::WakeUpWorker(SchedulerWorker* worker) { - DCHECK(worker); - RemoveFromIdleWorkersStack(worker); - worker->WakeUp(); - // TODO(robliao): Honor StandbyThreadPolicy::ONE here and consider adding - // hysteresis to the CanDetach check. See https://crbug.com/666041. -} - void SchedulerWorkerPoolImpl::WakeUpOneWorker() { SchedulerWorker* worker; { @@ -731,6 +555,8 @@ } if (worker) worker->WakeUp(); + // TODO(robliao): Honor StandbyThreadPolicy::ONE here and consider adding + // hysteresis to the CanDetach check. See https://crbug.com/666041. } void SchedulerWorkerPoolImpl::AddToIdleWorkersStack(
diff --git a/base/task_scheduler/scheduler_worker_pool_impl.h b/base/task_scheduler/scheduler_worker_pool_impl.h index d4b8440..0c1fdcd 100644 --- a/base/task_scheduler/scheduler_worker_pool_impl.h +++ b/base/task_scheduler/scheduler_worker_pool_impl.h
@@ -67,16 +67,12 @@ const TaskTraits& traits) override; scoped_refptr<SequencedTaskRunner> CreateSequencedTaskRunnerWithTraits( const TaskTraits& traits) override; - scoped_refptr<SingleThreadTaskRunner> CreateSingleThreadTaskRunnerWithTraits( - const TaskTraits& traits) override; void ReEnqueueSequence(scoped_refptr<Sequence> sequence, const SequenceSortKey& sequence_sort_key) override; bool PostTaskWithSequence(std::unique_ptr<Task> task, - scoped_refptr<Sequence> sequence, - SchedulerWorker* worker) override; + scoped_refptr<Sequence> sequence) override; void PostTaskWithSequenceNow(std::unique_ptr<Task> task, - scoped_refptr<Sequence> sequence, - SchedulerWorker* worker) override; + scoped_refptr<Sequence> sequence) override; const HistogramBase* num_tasks_before_detach_histogram() const { return num_tasks_before_detach_histogram_; @@ -111,7 +107,6 @@ size_t NumberOfAliveWorkersForTesting(); private: - class SchedulerSingleThreadTaskRunner; class SchedulerWorkerDelegateImpl; SchedulerWorkerPoolImpl(const SchedulerWorkerPoolParams& params, @@ -122,9 +117,6 @@ const SchedulerWorkerPoolParams& params, const ReEnqueueSequenceCallback& re_enqueue_sequence_callback); - // Wakes up |worker|. - void WakeUpWorker(SchedulerWorker* worker); - // Wakes up the last worker from this worker pool to go idle, if any. void WakeUpOneWorker(); @@ -147,13 +139,6 @@ // of the worker pool. std::vector<scoped_refptr<SchedulerWorker>> workers_; - // Synchronizes access to |next_worker_index_|. - SchedulerLock next_worker_index_lock_; - - // Index of the worker that will be assigned to the next single-threaded - // TaskRunner returned by this pool. - size_t next_worker_index_ = 0; - // PriorityQueue from which all threads of this worker pool get work. PriorityQueue shared_priority_queue_;
diff --git a/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc b/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc index 52187058..f3b1bed 100644 --- a/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc +++ b/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
@@ -121,10 +121,11 @@ return worker_pool->CreateTaskRunnerWithTraits(traits); case test::ExecutionMode::SEQUENCED: return worker_pool->CreateSequencedTaskRunnerWithTraits(traits); - case test::ExecutionMode::SINGLE_THREADED: - return worker_pool->CreateSingleThreadTaskRunnerWithTraits(traits); + default: + // Fall through. + break; } - ADD_FAILURE() << "Unknown ExecutionMode"; + ADD_FAILURE() << "Unexpected ExecutionMode"; return nullptr; } @@ -373,128 +374,6 @@ INSTANTIATE_TEST_CASE_P(Sequenced, TaskSchedulerWorkerPoolImplTest, ::testing::Values(test::ExecutionMode::SEQUENCED)); -INSTANTIATE_TEST_CASE_P( - SingleThreaded, - TaskSchedulerWorkerPoolImplTest, - ::testing::Values(test::ExecutionMode::SINGLE_THREADED)); - -namespace { - -// Same as TaskSchedulerWorkerPoolImplTest but its SchedulerWorkerPoolImpl -// instance uses |max_threads == 1|. -class TaskSchedulerWorkerPoolImplSingleWorkerTest - : public TaskSchedulerWorkerPoolImplTest { - public: - TaskSchedulerWorkerPoolImplSingleWorkerTest() = default; - - protected: - void SetUp() override { - InitializeWorkerPool(TimeDelta::Max(), 1); - } - - private: - DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerPoolImplSingleWorkerTest); -}; - -} // namespace - -// Verify that the RunsTasksOnCurrentThread() method of a -// SchedulerSingleThreadTaskRunner returns false when called from a task that -// isn't part of its sequence even though it's running on that -// SchedulerSingleThreadTaskRunner's assigned worker. Note: Tests that use -// TestTaskFactory already verify that RunsTasksOnCurrentThread() returns true -// when appropriate so this method complements it to get full coverage of that -// method. -TEST_P(TaskSchedulerWorkerPoolImplSingleWorkerTest, - SingleThreadRunsTasksOnCurrentThread) { - scoped_refptr<TaskRunner> task_runner( - CreateTaskRunnerWithExecutionMode(worker_pool_.get(), GetParam())); - scoped_refptr<SingleThreadTaskRunner> single_thread_task_runner( - worker_pool_->CreateSingleThreadTaskRunnerWithTraits(TaskTraits())); - - WaitableEvent task_ran(WaitableEvent::ResetPolicy::MANUAL, - WaitableEvent::InitialState::NOT_SIGNALED); - task_runner->PostTask( - FROM_HERE, - Bind( - [](scoped_refptr<TaskRunner> single_thread_task_runner, - WaitableEvent* task_ran) { - EXPECT_FALSE(single_thread_task_runner->RunsTasksOnCurrentThread()); - task_ran->Signal(); - }, - single_thread_task_runner, Unretained(&task_ran))); - task_ran.Wait(); -} - -INSTANTIATE_TEST_CASE_P(Parallel, - TaskSchedulerWorkerPoolImplSingleWorkerTest, - ::testing::Values(test::ExecutionMode::PARALLEL)); -INSTANTIATE_TEST_CASE_P(Sequenced, - TaskSchedulerWorkerPoolImplSingleWorkerTest, - ::testing::Values(test::ExecutionMode::SEQUENCED)); -INSTANTIATE_TEST_CASE_P( - SingleThreaded, - TaskSchedulerWorkerPoolImplSingleWorkerTest, - ::testing::Values(test::ExecutionMode::SINGLE_THREADED)); - -namespace { - -class TaskSchedulerWorkerPoolSingleThreadedTest - : public TaskSchedulerWorkerPoolImplTest { - public: - void InitializeThreadChecker() { - thread_checker_.reset(new ThreadCheckerImpl()); - } - - void CheckValidThread() { - EXPECT_TRUE(thread_checker_->CalledOnValidThread()); - } - - protected: - void SetUp() override { - InitializeWorkerPool(kReclaimTimeForDetachTests, kNumWorkersInWorkerPool); - } - - TaskSchedulerWorkerPoolSingleThreadedTest() = default; - - private: - std::unique_ptr<ThreadCheckerImpl> thread_checker_; - - DISALLOW_COPY_AND_ASSIGN(TaskSchedulerWorkerPoolSingleThreadedTest); -}; - -} // namespace - -// Verify that thread resources for a single thread remain. -TEST_F(TaskSchedulerWorkerPoolSingleThreadedTest, SingleThreadTask) { - auto single_thread_task_runner = - worker_pool_->CreateSingleThreadTaskRunnerWithTraits( - TaskTraits().WithShutdownBehavior( - TaskShutdownBehavior::BLOCK_SHUTDOWN)); - single_thread_task_runner->PostTask( - FROM_HERE, - Bind(&TaskSchedulerWorkerPoolSingleThreadedTest::InitializeThreadChecker, - Unretained(this))); - WaitableEvent task_waiter(WaitableEvent::ResetPolicy::AUTOMATIC, - WaitableEvent::InitialState::NOT_SIGNALED); - single_thread_task_runner->PostTask( - FROM_HERE, Bind(&WaitableEvent::Signal, Unretained(&task_waiter))); - task_waiter.Wait(); - worker_pool_->WaitForAllWorkersIdleForTesting(); - - // Give the worker pool a chance to reclaim its threads. - PlatformThread::Sleep(kReclaimTimeForDetachTests + kExtraTimeToWaitForDetach); - - worker_pool_->DisallowWorkerDetachmentForTesting(); - - single_thread_task_runner->PostTask( - FROM_HERE, - Bind(&TaskSchedulerWorkerPoolSingleThreadedTest::CheckValidThread, - Unretained(this))); - single_thread_task_runner->PostTask( - FROM_HERE, Bind(&WaitableEvent::Signal, Unretained(&task_waiter))); - task_waiter.Wait(); -} namespace {
diff --git a/base/task_scheduler/task_scheduler_impl.cc b/base/task_scheduler/task_scheduler_impl.cc index 9f4e4b0..e5c8abf 100644 --- a/base/task_scheduler/task_scheduler_impl.cc +++ b/base/task_scheduler/task_scheduler_impl.cc
@@ -49,7 +49,7 @@ // Post |task| as part of a one-off single-task Sequence. GetWorkerPoolForTraits(traits)->PostTaskWithSequence( MakeUnique<Task>(from_here, task, traits, delay), - make_scoped_refptr(new Sequence), nullptr); + make_scoped_refptr(new Sequence)); } scoped_refptr<TaskRunner> TaskSchedulerImpl::CreateTaskRunnerWithTraits(
diff --git a/build/android/pylib/gtest/gtest_test_instance.py b/build/android/pylib/gtest/gtest_test_instance.py index 32e7b7d..a426428 100644 --- a/build/android/pylib/gtest/gtest_test_instance.py +++ b/build/android/pylib/gtest/gtest_test_instance.py
@@ -138,7 +138,7 @@ def handle_possibly_unknown_test(): if test_name is not None: results.append(base_test_result.BaseTestResult( - test_name, + TestNameWithoutDisabledPrefix(test_name), fallback_result_type or base_test_result.ResultType.UNKNOWN, duration, log=('\n'.join(log) if log else ''))) @@ -175,7 +175,7 @@ if result_type and test_name: results.append(base_test_result.BaseTestResult( - test_name, result_type, duration, + TestNameWithoutDisabledPrefix(test_name), result_type, duration, log=('\n'.join(log) if log else ''))) test_name = None @@ -203,7 +203,7 @@ log.append(html.unescape(failure.attrib['message'])) results.append(base_test_result.BaseTestResult( - '%s.%s' % (suite_name, case_name), + '%s.%s' % (suite_name, TestNameWithoutDisabledPrefix(case_name)), result_type, int(float(testcase.attrib['time']) * 1000), log=('\n'.join(log) if log else '')))
diff --git a/build/android/pylib/local/device/local_device_gtest_run.py b/build/android/pylib/local/device/local_device_gtest_run.py index a121296..6bd06dd 100644 --- a/build/android/pylib/local/device/local_device_gtest_run.py +++ b/build/android/pylib/local/device/local_device_gtest_run.py
@@ -442,7 +442,12 @@ stream_name, resolved_tombstones) result.SetLink('tombstones', tombstones_url) - not_run_tests = set(test).difference(set(r.GetName() for r in results)) + tests_stripped_disabled_prefix = set() + for t in test: + tests_stripped_disabled_prefix.add( + gtest_test_instance.TestNameWithoutDisabledPrefix(t)) + not_run_tests = tests_stripped_disabled_prefix.difference( + set(r.GetName() for r in results)) return results, list(not_run_tests) if results else None #override
diff --git a/cc/BUILD.gn b/cc/BUILD.gn index 7ca79c7..83658571 100644 --- a/cc/BUILD.gn +++ b/cc/BUILD.gn
@@ -115,7 +115,6 @@ "layers/picture_layer.h", "layers/picture_layer_impl.cc", "layers/picture_layer_impl.h", - "layers/render_pass_sink.h", "layers/render_surface_impl.cc", "layers/render_surface_impl.h", "layers/scrollbar_layer_impl_base.cc",
diff --git a/cc/layers/render_pass_sink.h b/cc/layers/render_pass_sink.h deleted file mode 100644 index aa5bfbc..0000000 --- a/cc/layers/render_pass_sink.h +++ /dev/null
@@ -1,25 +0,0 @@ -// Copyright 2012 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. - -#ifndef CC_LAYERS_RENDER_PASS_SINK_H_ -#define CC_LAYERS_RENDER_PASS_SINK_H_ - -#include <memory> - -#include "cc/base/cc_export.h" - -namespace cc { -class RenderPass; - -class CC_EXPORT RenderPassSink { - public: - virtual void AppendRenderPass(std::unique_ptr<RenderPass> render_pass) = 0; - - protected: - virtual ~RenderPassSink() {} -}; - -} // namespace cc - -#endif // CC_LAYERS_RENDER_PASS_SINK_H_
diff --git a/cc/layers/render_surface_impl.cc b/cc/layers/render_surface_impl.cc index 4b63556..f67b6d1b 100644 --- a/cc/layers/render_surface_impl.cc +++ b/cc/layers/render_surface_impl.cc
@@ -13,7 +13,6 @@ #include "cc/base/math_util.h" #include "cc/debug/debug_colors.h" #include "cc/layers/layer_impl.h" -#include "cc/layers/render_pass_sink.h" #include "cc/output/filter_operations.h" #include "cc/quads/debug_border_draw_quad.h" #include "cc/quads/render_pass.h" @@ -357,7 +356,7 @@ return id(); } -void RenderSurfaceImpl::AppendRenderPasses(RenderPassSink* pass_sink) { +std::unique_ptr<RenderPass> RenderSurfaceImpl::CreateRenderPass() { std::unique_ptr<RenderPass> pass = RenderPass::Create(layer_list_.size()); gfx::Rect damage_rect = GetDamageRect(); damage_rect.Intersect(content_rect()); @@ -365,7 +364,7 @@ draw_properties_.screen_space_transform); pass->filters = Filters(); pass->background_filters = BackgroundFilters(); - pass_sink->AppendRenderPass(std::move(pass)); + return pass; } void RenderSurfaceImpl::AppendQuads(RenderPass* render_pass,
diff --git a/cc/layers/render_surface_impl.h b/cc/layers/render_surface_impl.h index 1b2f0cd..547e0fcf 100644 --- a/cc/layers/render_surface_impl.h +++ b/cc/layers/render_surface_impl.h
@@ -27,7 +27,6 @@ class DamageTracker; class FilterOperations; class Occlusion; -class RenderPassSink; class LayerImpl; class LayerIterator; class LayerTreeImpl; @@ -147,7 +146,7 @@ int GetRenderPassId(); - void AppendRenderPasses(RenderPassSink* pass_sink); + std::unique_ptr<RenderPass> CreateRenderPass(); void AppendQuads(RenderPass* render_pass, AppendQuadsData* append_quads_data); int TransformTreeIndex() const;
diff --git a/cc/layers/render_surface_unittest.cc b/cc/layers/render_surface_unittest.cc index 85ed8c4..281a6d5 100644 --- a/cc/layers/render_surface_unittest.cc +++ b/cc/layers/render_surface_unittest.cc
@@ -4,7 +4,6 @@ #include "cc/layers/append_quads_data.h" #include "cc/layers/layer_impl.h" -#include "cc/layers/render_pass_sink.h" #include "cc/layers/render_surface_impl.h" #include "cc/quads/shared_quad_state.h" #include "cc/test/fake_compositor_frame_sink.h" @@ -152,19 +151,6 @@ EXPECT_EQ(blend_mode, shared_quad_state->blend_mode); } -class TestRenderPassSink : public RenderPassSink { - public: - void AppendRenderPass(std::unique_ptr<RenderPass> render_pass) override { - render_passes_.push_back(std::move(render_pass)); - } - - const RenderPassList& RenderPasses() const { - return render_passes_; - } - - private: - RenderPassList render_passes_; -}; TEST(RenderSurfaceTest, SanityCheckSurfaceCreatesCorrectRenderPass) { FakeImplTaskRunnerProvider task_runner_provider; @@ -199,12 +185,7 @@ render_surface->SetScreenSpaceTransform(origin); render_surface->SetContentRectForTesting(content_rect); - TestRenderPassSink pass_sink; - - render_surface->AppendRenderPasses(&pass_sink); - - ASSERT_EQ(1u, pass_sink.RenderPasses().size()); - RenderPass* pass = pass_sink.RenderPasses()[0].get(); + auto pass = render_surface->CreateRenderPass(); EXPECT_EQ(2, pass->id); EXPECT_EQ(content_rect, pass->output_rect);
diff --git a/cc/tiles/image_controller_unittest.cc b/cc/tiles/image_controller_unittest.cc index 90b708f..ccd9066 100644 --- a/cc/tiles/image_controller_unittest.cc +++ b/cc/tiles/image_controller_unittest.cc
@@ -8,6 +8,7 @@ #include "base/run_loop.h" #include "base/test/test_simple_task_runner.h" #include "base/threading/sequenced_task_runner_handle.h" +#include "base/threading/thread_checker_impl.h" #include "cc/test/skia_common.h" #include "cc/tiles/image_decode_cache.h" #include "testing/gtest/include/gtest/gtest.h" @@ -212,7 +213,8 @@ private: ~BlockingTask() override = default; - base::ThreadChecker thread_checker_; + // Use ThreadCheckerImpl, so that release builds also get correct behavior. + base::ThreadCheckerImpl thread_checker_; bool has_run_ = false; base::Lock lock_; base::ConditionVariable run_cv_; @@ -222,8 +224,7 @@ }; // For tests that exercise image controller's thread, this is the timeout value -// to -// allow the worker thread to do its work. +// to allow the worker thread to do its work. int kDefaultTimeoutSeconds = 10; class ImageControllerTest : public testing::Test {
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index 2727eda2..0051d95 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -720,11 +720,6 @@ } } -void LayerTreeHostImpl::FrameData::AppendRenderPass( - std::unique_ptr<RenderPass> render_pass) { - render_passes.push_back(std::move(render_pass)); -} - DrawMode LayerTreeHostImpl::GetDrawMode() const { if (resourceless_software_draw_) { return DRAW_MODE_RESOURCELESS_SOFTWARE; @@ -837,7 +832,7 @@ render_surface->contributes_to_drawn_surface() || render_surface->HasCopyRequest(); if (should_draw_into_render_pass) - render_surface->AppendRenderPasses(frame); + frame->render_passes.push_back(render_surface->CreateRenderPass()); } // Damage rects for non-root passes aren't meaningful, so set them to be
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h index a03baac..5b2cfa48 100644 --- a/cc/trees/layer_tree_host_impl.h +++ b/cc/trees/layer_tree_host_impl.h
@@ -24,7 +24,6 @@ #include "cc/input/input_handler.h" #include "cc/input/scrollbar_animation_controller.h" #include "cc/layers/layer_collections.h" -#include "cc/layers/render_pass_sink.h" #include "cc/output/begin_frame_args.h" #include "cc/output/compositor_frame_sink_client.h" #include "cc/output/context_cache_controller.h" @@ -216,9 +215,9 @@ resourceless_software_draw_ = true; } - struct CC_EXPORT FrameData : public RenderPassSink { + struct CC_EXPORT FrameData { FrameData(); - ~FrameData() override; + ~FrameData(); void AsValueInto(base::trace_event::TracedValue* value) const; std::vector<gfx::Rect> occluding_screen_space_rects; @@ -230,9 +229,6 @@ bool may_contain_video; BeginFrameAck begin_frame_ack; - // RenderPassSink implementation. - void AppendRenderPass(std::unique_ptr<RenderPass> render_pass) override; - private: DISALLOW_COPY_AND_ASSIGN(FrameData); };
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 10e4978..a01f6d47 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -520,7 +520,9 @@ ] data = [ + "//chrome/android/shared_preference_files/test/", "//chrome/test/data/android/", + "//third_party/gvr-android-sdk/test-apks/", "//third_party/WebKit/LayoutTests/resources/testharness.js", ] }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java index cbbcd4b..913da57 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java
@@ -368,12 +368,6 @@ @VisibleForTesting @CalledByNative - void removeDevice(String deviceId) { - mItemChooserDialog.setEnabled(deviceId, false); - } - - @VisibleForTesting - @CalledByNative void notifyAdapterTurnedOff() { SpannableString adapterOffMessage = SpanApplier.applySpans( mActivity.getString(R.string.bluetooth_adapter_off),
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp index 2da9672..f751f02 100644 --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp
@@ -212,7 +212,7 @@ Manage your Android preferences </message> <message name="IDS_SETTINGS_ANDROID_APPS_LEARN_MORE" desc="Link for more informaiton about installing Android apps on Chrome OS."> - Learn more. + Learn more </message> <message name="IDS_SETTINGS_ANDROID_APPS_DISABLE_DIALOG_TITLE" desc="Title of the confirmation dialog for disabling android apps."> @@ -1594,6 +1594,12 @@ <message name="IDS_SETTINGS_ENABLE_DO_NOT_TRACK" desc="The label of the checkbox to enable/disable sending the 'Do Not track' header"> Send a "Do Not Track" request with your browsing traffic </message> + <message name="IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_TITLE" desc="The title of a confirmation dialog that confirms that the user want to send the 'Do Not Track' header"> + Do Not Track + </message> + <message name="IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_TEXT" desc="The text of a confirmation dialog that confirms that the user want to send the 'Do Not Track' header"> + Enabling "Do Not Track" means that a request will be included with your browsing traffic. Any effect depends on whether a website responds to the request, and how the request is interpreted. For example, some websites may respond to this request by showing you ads that aren't based on other websites you've visited. Many websites will still collect and use your browsing data - for example to improve security, to provide content, services, ads and recommendations on their websites, and to generate reporting statistics. <ph name="BEGIN_LINK"><a target="_blank" href="$1"></ph>Learn more<ph name="END_LINK"></a><ex></a></ex></ph> + </message> <message name="IDS_SETTINGS_ENABLE_CONTENT_PROTECTION_ATTESTATION" desc="description label for verified access about premium contents"> Enable Verified Access </message>
diff --git a/chrome/browser/chromeos/arc/arc_session_manager.h b/chrome/browser/chromeos/arc/arc_session_manager.h index 1f23796b..cfd26db 100644 --- a/chrome/browser/chromeos/arc/arc_session_manager.h +++ b/chrome/browser/chromeos/arc/arc_session_manager.h
@@ -216,6 +216,9 @@ // been started yet. base::Time arc_start_time() const { return arc_start_time_; } + // Returns true if ARC requested to start. + bool enable_requested() const { return enable_requested_; } + // Injectors for testing. void SetArcSessionRunnerForTesting( std::unique_ptr<ArcSessionRunner> arc_session_runner);
diff --git a/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc b/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc index 890bb7f..9ab638d 100644 --- a/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc +++ b/chrome/browser/chromeos/arc/arc_session_manager_unittest.cc
@@ -555,6 +555,31 @@ arc_session_manager()->Shutdown(); } +TEST_P(ArcSessionManagerPolicyTest, ReenableManagedArc) { + sync_preferences::TestingPrefServiceSyncable* const prefs = + profile()->GetTestingPrefService(); + + // Set ARC to be managed. + prefs->SetManagedPref(prefs::kArcEnabled, new base::Value(true)); + EXPECT_TRUE(arc::IsArcPlayStoreEnabledForProfile(profile())); + + arc_session_manager()->SetProfile(profile()); + arc_session_manager()->RequestEnable(); + EXPECT_TRUE(arc_session_manager()->enable_requested()); + + // Simulate close OptIn. Session manager should stop. + SetArcPlayStoreEnabledForProfile(profile(), false); + EXPECT_TRUE(arc::IsArcPlayStoreEnabledForProfile(profile())); + EXPECT_FALSE(arc_session_manager()->enable_requested()); + + // Restart ARC again + SetArcPlayStoreEnabledForProfile(profile(), true); + EXPECT_TRUE(arc::IsArcPlayStoreEnabledForProfile(profile())); + EXPECT_TRUE(arc_session_manager()->enable_requested()); + + arc_session_manager()->Shutdown(); +} + INSTANTIATE_TEST_CASE_P( ArcSessionManagerPolicyTest, ArcSessionManagerPolicyTest, @@ -751,13 +776,20 @@ EXPECT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE, arc_session_manager()->state()); ReportResult(false); - // ArcPlayStoreEnabledPreferenceHandler is not running, so the state should - // be kept as is. - EXPECT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE, - arc_session_manager()->state()); - // Managed user's preference should not be overwritten. - if (!IsManagedUser()) + if (!IsManagedUser()) { + // ArcPlayStoreEnabledPreferenceHandler is not running, so the state should + // be kept as is + EXPECT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE, + arc_session_manager()->state()); EXPECT_FALSE(IsArcPlayStoreEnabledForProfile(profile())); + } else { + // For managed case we handle closing outside of + // ArcPlayStoreEnabledPreferenceHandler. So it session turns to STOPPED. + EXPECT_EQ(ArcSessionManager::State::STOPPED, + arc_session_manager()->state()); + // Managed user's preference should not be overwritten. + EXPECT_TRUE(IsArcPlayStoreEnabledForProfile(profile())); + } } TEST_P(ArcSessionOobeOptInNegotiatorTest, OobeTermsViewDestroyed) { @@ -766,13 +798,20 @@ arc_session_manager()->state()); CloseLoginDisplayHost(); ReportViewDestroyed(); - // ArcPlayStoreEnabledPreferenceHandler is not running, so the state should - // be kept as is. - EXPECT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE, - arc_session_manager()->state()); - // Managed user's preference should not be overwritten. - if (!IsManagedUser()) + if (!IsManagedUser()) { + // ArcPlayStoreEnabledPreferenceHandler is not running, so the state should + // be kept as is. + EXPECT_EQ(ArcSessionManager::State::NEGOTIATING_TERMS_OF_SERVICE, + arc_session_manager()->state()); EXPECT_FALSE(IsArcPlayStoreEnabledForProfile(profile())); + } else { + // For managed case we handle closing outside of + // ArcPlayStoreEnabledPreferenceHandler. So it session turns to STOPPED. + EXPECT_EQ(ArcSessionManager::State::STOPPED, + arc_session_manager()->state()); + // Managed user's preference should not be overwritten. + EXPECT_TRUE(IsArcPlayStoreEnabledForProfile(profile())); + } } } // namespace arc
diff --git a/chrome/browser/chromeos/arc/arc_util.cc b/chrome/browser/chromeos/arc/arc_util.cc index f91cebc..3c40a7c 100644 --- a/chrome/browser/chromeos/arc/arc_util.cc +++ b/chrome/browser/chromeos/arc/arc_util.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/chromeos/arc/arc_util.h" #include "base/logging.h" +#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/login/user_flow.h" #include "chrome/browser/chromeos/login/users/chrome_user_manager.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" @@ -114,8 +115,20 @@ void SetArcPlayStoreEnabledForProfile(Profile* profile, bool enabled) { DCHECK(IsArcAllowedForProfile(profile)); if (IsArcPlayStoreEnabledPreferenceManagedForProfile(profile)) { - VLOG(1) << "Do nothing, since the Google-Play-Store-enabled pref is " - << "managed."; + VLOG(1) << "Google-Play-Store-enabled pref is managed. Request to " + << (enabled ? "enable" : "disable") << " Play Store is not stored"; + // Need update ARC session manager manually for managed case in order to + // keep its state up to date, otherwise it may stuck with enabling + // request. + // TODO (khmel): Consider finding the better way handling this. + ArcSessionManager* arc_session_manager = ArcSessionManager::Get(); + // |arc_session_manager| can be nullptr in unit_tests. + if (!arc_session_manager) + return; + if (enabled) + arc_session_manager->RequestEnable(); + else + arc_session_manager->RequestDisable(); return; } profile->GetPrefs()->SetBoolean(prefs::kArcEnabled, enabled);
diff --git a/chrome/browser/chromeos/system_logs/OWNERS b/chrome/browser/chromeos/system_logs/OWNERS index 13e3b59..b9f340d 100644 --- a/chrome/browser/chromeos/system_logs/OWNERS +++ b/chrome/browser/chromeos/system_logs/OWNERS
@@ -1,2 +1,4 @@ afakhry@chromium.org steel@chromium.org + +# COMPONENT: Platform>Apps>Feedback
diff --git a/chrome/browser/extensions/api/feedback_private/OWNERS b/chrome/browser/extensions/api/feedback_private/OWNERS index 13e3b59..b9f340d 100644 --- a/chrome/browser/extensions/api/feedback_private/OWNERS +++ b/chrome/browser/extensions/api/feedback_private/OWNERS
@@ -1,2 +1,4 @@ afakhry@chromium.org steel@chromium.org + +# COMPONENT: Platform>Apps>Feedback
diff --git a/chrome/browser/extensions/process_management_browsertest.cc b/chrome/browser/extensions/process_management_browsertest.cc index 012fb55..c446d02a 100644 --- a/chrome/browser/extensions/process_management_browsertest.cc +++ b/chrome/browser/extensions/process_management_browsertest.cc
@@ -6,16 +6,19 @@ #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" +#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/sessions/session_tab_helper.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/extensions/extension_process_policy.h" #include "chrome/common/url_constants.h" #include "chrome/test/base/ui_test_utils.h" +#include "content/public/browser/notification_service.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" @@ -390,3 +393,68 @@ // Verify that Chrome Web Store is isolated in a separate renderer process. EXPECT_NE(old_process_host, new_process_host); } + +// This test verifies that blocked navigations to extensions pages do not +// overwrite process-per-site map inside content/. +IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, + NavigateToBlockedExtensionPageInNewTab) { + host_resolver()->AddRule("*", "127.0.0.1"); + ASSERT_TRUE(embedded_test_server()->Start()); + + // Load an extension, which will block a request for a specific page in it. + const extensions::Extension* extension = LoadExtension( + test_data_dir_.AppendASCII("web_request_site_process_registration")); + ASSERT_TRUE(extension); + + WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + GURL blocked_url(extension->GetResourceURL("/blocked.html")); + + // Navigating to the blocked extension URL should be done through a redirect, + // otherwise it will result in an OpenURL IPC from the renderer process, which + // will initiate a navigation through the browser process. + GURL redirect_url( + embedded_test_server()->GetURL("/server-redirect?" + blocked_url.spec())); + + // Navigate the current tab to the test page in the extension, which will + // create the extension process and register the webRequest blocking listener. + ui_test_utils::NavigateToURL(browser(), + extension->GetResourceURL("/test.html")); + + // Open a new tab to about:blank, which will result in a new SiteInstance + // without an explicit site URL set. + ui_test_utils::NavigateToURLWithDisposition( + browser(), GURL(url::kAboutBlankURL), + WindowOpenDisposition::NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + WebContents* new_web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + + // Navigate the new tab to an extension URL that will be blocked by + // webRequest. It must be a renderer-initiated navigation. It also uses a + // redirect, otherwise the regular renderer process will send an OpenURL + // IPC to the browser due to the chrome-extension:// URL. + std::string script = + base::StringPrintf("location.href = '%s';", redirect_url.spec().c_str()); + content::TestNavigationObserver observer(new_web_contents); + EXPECT_TRUE(content::ExecuteScript(new_web_contents, script)); + observer.Wait(); + + EXPECT_EQ(observer.last_navigation_url(), blocked_url); + EXPECT_FALSE(observer.last_navigation_succeeded()); + + // Very subtle check for content/ internal functionality :(. + // When a navigation is blocked, it still commits an error page. Since + // extensions use the process-per-site model, each extension URL is registered + // in a map from URL to a process. Creating a brand new SiteInstance for the + // extension URL should always result in a SiteInstance that has a process and + // the process is the same for all SiteInstances. This allows us to verify + // that the site-to-process map for the extension hasn't been overwritten by + // the process of the |blocked_url|. + scoped_refptr<content::SiteInstance> new_site_instance = + content::SiteInstance::CreateForURL(web_contents->GetBrowserContext(), + extension->GetResourceURL("")); + EXPECT_TRUE(new_site_instance->HasProcess()); + EXPECT_EQ(new_site_instance->GetProcess(), + web_contents->GetSiteInstance()->GetProcess()); +}
diff --git a/chrome/browser/feedback/OWNERS b/chrome/browser/feedback/OWNERS index 0e1f7b3..409dfd7 100644 --- a/chrome/browser/feedback/OWNERS +++ b/chrome/browser/feedback/OWNERS
@@ -1,3 +1,5 @@ afakhry@chromium.org steel@chromium.org zork@chromium.org + +# COMPONENT: Platform>Apps>Feedback
diff --git a/chrome/browser/media/router/BUILD.gn b/chrome/browser/media/router/BUILD.gn index 5e728ee..5f4f645 100644 --- a/chrome/browser/media/router/BUILD.gn +++ b/chrome/browser/media/router/BUILD.gn
@@ -14,6 +14,7 @@ "//components/keyed_service/core", "//content/public/browser", "//content/public/common", + "//net", "//third_party/icu", "//url", ] @@ -22,6 +23,8 @@ "browser_presentation_connection_proxy.h", "create_presentation_connection_request.cc", "create_presentation_connection_request.h", + "discovery/media_sink_internal.cc", + "discovery/media_sink_internal.h", "issue.cc", "issue.h", "issue_manager.cc", @@ -104,10 +107,22 @@ public_deps = [ "//mojo/common:common_custom_types", + "//net/interfaces:interfaces", + "//url/mojo:url_mojom_gurl", "//url/mojo:url_mojom_origin", ] } +mojom("mojo_test_interfaces") { + sources = [ + "mojo/media_router_traits_test_service.mojom", + ] + + public_deps = [ + ":mojo_bindings", + ] +} + static_library("test_support") { testonly = true deps = [ @@ -127,6 +142,7 @@ if (!is_android) { deps += [ ":mojo_bindings", + ":mojo_test_interfaces", "//extensions/common", ] sources += [
diff --git a/chrome/browser/media/router/discovery/media_sink_internal.cc b/chrome/browser/media/router/discovery/media_sink_internal.cc new file mode 100644 index 0000000..fe381f2 --- /dev/null +++ b/chrome/browser/media/router/discovery/media_sink_internal.cc
@@ -0,0 +1,175 @@ +// Copyright 2017 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. + +#include "chrome/browser/media/router/discovery/media_sink_internal.h" + +#include "base/logging.h" +#include "base/strings/string_util.h" + +namespace media_router { + +MediaSinkInternal::MediaSinkInternal(const MediaSink& sink, + const DialSinkExtraData& dial_data) + : sink_(sink), sink_type_(SinkType::DIAL) { + dial_data_.Init(dial_data); +} + +MediaSinkInternal::MediaSinkInternal(const MediaSink& sink, + const CastSinkExtraData& cast_data) + : sink_(sink), sink_type_(SinkType::CAST) { + cast_data_.Init(cast_data); +} + +MediaSinkInternal::MediaSinkInternal() : sink_type_(SinkType::GENERIC) {} + +MediaSinkInternal::MediaSinkInternal(const MediaSinkInternal& other) { + InternalCopyConstructFrom(other); +} + +MediaSinkInternal::~MediaSinkInternal() { + InternalCleanup(); +} + +MediaSinkInternal& MediaSinkInternal::operator=( + const MediaSinkInternal& other) { + if (this != &other) { + if (sink_type_ == other.sink_type_) { + InternalCopyAssignFrom(other); + } else { + InternalCleanup(); + InternalCopyConstructFrom(other); + } + } + + return *this; +} + +bool MediaSinkInternal::operator==(const MediaSinkInternal& other) const { + if (sink_type_ != other.sink_type_) + return false; + + if (sink_ != other.sink_) + return false; + + switch (sink_type_) { + case SinkType::DIAL: + return *dial_data_ == *(other.dial_data_); + case SinkType::CAST: + return *cast_data_ == *(other.cast_data_); + case SinkType::GENERIC: + return true; + } + NOTREACHED(); + return false; +} + +void MediaSinkInternal::set_sink(const MediaSink& sink) { + sink_ = sink; +} + +void MediaSinkInternal::set_dial_data(const DialSinkExtraData& dial_data) { + DCHECK(sink_type_ != SinkType::CAST); + InternalCleanup(); + + sink_type_ = SinkType::DIAL; + dial_data_.Init(dial_data); +} + +const DialSinkExtraData& MediaSinkInternal::dial_data() const { + DCHECK(is_dial_sink()); + return *dial_data_; +} + +void MediaSinkInternal::set_cast_data(const CastSinkExtraData& cast_data) { + DCHECK(sink_type_ != SinkType::DIAL); + InternalCleanup(); + + sink_type_ = SinkType::CAST; + cast_data_.Init(cast_data); +} + +const CastSinkExtraData& MediaSinkInternal::cast_data() const { + DCHECK(is_cast_sink()); + return *cast_data_; +} + +// static +bool MediaSinkInternal::IsValidSinkId(const std::string& sink_id) { + if (sink_id.empty() || !base::IsStringASCII(sink_id)) { + DLOG(WARNING) << "Invalid [sink_id]: " << sink_id; + return false; + } + + return true; +} + +void MediaSinkInternal::InternalCopyAssignFrom(const MediaSinkInternal& other) { + sink_ = other.sink_; + sink_type_ = other.sink_type_; + + switch (sink_type_) { + case SinkType::DIAL: + *dial_data_ = *other.dial_data_; + return; + case SinkType::CAST: + *cast_data_ = *other.cast_data_; + return; + case SinkType::GENERIC: + return; + } + NOTREACHED(); +} + +void MediaSinkInternal::InternalCopyConstructFrom( + const MediaSinkInternal& other) { + sink_ = other.sink_; + sink_type_ = other.sink_type_; + + switch (sink_type_) { + case SinkType::DIAL: + dial_data_.Init(*other.dial_data_); + return; + case SinkType::CAST: + cast_data_.Init(*other.cast_data_); + return; + case SinkType::GENERIC: + return; + } + NOTREACHED(); +} + +void MediaSinkInternal::InternalCleanup() { + switch (sink_type_) { + case SinkType::DIAL: + dial_data_.Destroy(); + return; + case SinkType::CAST: + cast_data_.Destroy(); + return; + case SinkType::GENERIC: + return; + } + NOTREACHED(); +} + +DialSinkExtraData::DialSinkExtraData() = default; +DialSinkExtraData::DialSinkExtraData(const DialSinkExtraData& other) = default; +DialSinkExtraData::~DialSinkExtraData() = default; + +bool DialSinkExtraData::operator==(const DialSinkExtraData& other) const { + return ip_address == other.ip_address && model_name == other.model_name && + app_url == other.app_url; +} + +CastSinkExtraData::CastSinkExtraData() = default; +CastSinkExtraData::CastSinkExtraData(const CastSinkExtraData& other) = default; +CastSinkExtraData::~CastSinkExtraData() = default; + +bool CastSinkExtraData::operator==(const CastSinkExtraData& other) const { + return ip_address == other.ip_address && model_name == other.model_name && + capabilities == other.capabilities && + cast_channel_id == other.cast_channel_id; +} + +} // namespace media_router
diff --git a/chrome/browser/media/router/discovery/media_sink_internal.h b/chrome/browser/media/router/discovery/media_sink_internal.h new file mode 100644 index 0000000..9d57beb0 --- /dev/null +++ b/chrome/browser/media/router/discovery/media_sink_internal.h
@@ -0,0 +1,128 @@ +// Copyright 2017 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. + +#ifndef CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_MEDIA_SINK_INTERNAL_H_ +#define CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_MEDIA_SINK_INTERNAL_H_ + +#include <utility> + +#include "base/memory/manual_constructor.h" +#include "chrome/browser/media/router/media_sink.h" +#include "net/base/ip_address.h" +#include "url/gurl.h" + +namespace media_router { + +// Extra data for DIAL media sink. +struct DialSinkExtraData { + net::IPAddress ip_address; + + // Model name of the sink. + std::string model_name; + + // The base URL used for DIAL operations. + GURL app_url; + + DialSinkExtraData(); + DialSinkExtraData(const DialSinkExtraData& other); + ~DialSinkExtraData(); + + bool operator==(const DialSinkExtraData& other) const; +}; + +// Extra data for Cast media sink. +struct CastSinkExtraData { + net::IPAddress ip_address; + + // Model name of the sink. + std::string model_name; + + // A bit vector representing the capabilities of the sink. The values are + // defined in media_router.mojom. + uint8_t capabilities = 0; + + // ID of Cast channel opened for the sink. The caller must set this value to a + // valid cast_channel_id. The cast_channel_id may change over time as the + // browser reconnects to a device. + int cast_channel_id = 0; + + CastSinkExtraData(); + CastSinkExtraData(const CastSinkExtraData& other); + ~CastSinkExtraData(); + + bool operator==(const CastSinkExtraData& other) const; +}; + +// Represents a media sink discovered by MediaSinkService. It is used by +// MediaSinkService to push MediaSinks with extra data to the +// MediaRouteProvider, and it is not exposed to users of MediaRouter. +class MediaSinkInternal { + public: + // Used by mojo. + MediaSinkInternal(); + + // Used by MediaSinkService to create media sinks. + MediaSinkInternal(const MediaSink& sink, const DialSinkExtraData& dial_data); + MediaSinkInternal(const MediaSink& sink, const CastSinkExtraData& cast_data); + + // Used to push instance of this class into vector. + MediaSinkInternal(const MediaSinkInternal& other); + + ~MediaSinkInternal(); + + MediaSinkInternal& operator=(const MediaSinkInternal& other); + bool operator==(const MediaSinkInternal& other) const; + + // Used by mojo. + void set_sink_id(const MediaSink::Id& sink_id) { sink_.set_sink_id(sink_id); } + void set_name(const std::string& name) { sink_.set_name(name); } + void set_description(const std::string& description) { + sink_.set_description(description); + } + void set_domain(const std::string& domain) { sink_.set_domain(domain); } + void set_icon_type(MediaSink::IconType icon_type) { + sink_.set_icon_type(icon_type); + } + + void set_sink(const MediaSink& sink); + const MediaSink& sink() const { return sink_; } + + void set_dial_data(const DialSinkExtraData& dial_data); + + // Must only be called if the sink is a DIAL sink. + const DialSinkExtraData& dial_data() const; + + void set_cast_data(const CastSinkExtraData& cast_data); + + // Must only be called if the sink is a Cast sink. + const CastSinkExtraData& cast_data() const; + + bool is_dial_sink() const { return sink_type_ == SinkType::DIAL; } + bool is_cast_sink() const { return sink_type_ == SinkType::CAST; } + + static bool IsValidSinkId(const std::string& sink_id); + + private: + void InternalCopyAssignFrom(const MediaSinkInternal& other); + void InternalCopyConstructFrom(const MediaSinkInternal& other); + void InternalCleanup(); + + enum class SinkType { GENERIC, DIAL, CAST }; + + MediaSink sink_; + + SinkType sink_type_; + + union { + // Set if sink is DIAL sink. + base::ManualConstructor<DialSinkExtraData> dial_data_; + + // Set if sink is Cast sink. + base::ManualConstructor<CastSinkExtraData> cast_data_; + }; +}; + +} // namespace media_router + +#endif // CHROME_BROWSER_MEDIA_ROUTER_DISCOVERY_MEDIA_SINK_INTERNAL_H_
diff --git a/chrome/browser/media/router/discovery/media_sink_internal_unittest.cc b/chrome/browser/media/router/discovery/media_sink_internal_unittest.cc new file mode 100644 index 0000000..138208b --- /dev/null +++ b/chrome/browser/media/router/discovery/media_sink_internal_unittest.cc
@@ -0,0 +1,128 @@ +// Copyright 2017 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. + +#include "chrome/browser/media/router/discovery/media_sink_internal.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace media_router { + +class MediaSinkInternalTest : public ::testing::Test { + public: + MediaSinkInternalTest() + : media_sink_(sink_id_, sink_name_, MediaSink::IconType::CAST) {} + + DialSinkExtraData CreateDialSinkExtraData() { + return CreateDialSinkExtraData(model_name_, ip_address_, app_url_); + } + + DialSinkExtraData CreateDialSinkExtraData(const std::string& model_name, + const std::string& ip_address, + const std::string& app_url) { + DialSinkExtraData dial_extra_data; + EXPECT_TRUE(dial_extra_data.ip_address.AssignFromIPLiteral(ip_address)); + dial_extra_data.model_name = model_name; + dial_extra_data.app_url = GURL(app_url); + + return dial_extra_data; + } + + CastSinkExtraData CreateCastSinkExtraData() { + return CreateCastSinkExtraData(model_name_, ip_address_, 2, 3); + } + + CastSinkExtraData CreateCastSinkExtraData(const std::string& model_name, + const std::string& ip_address, + uint8_t capabilities, + int cast_channel_id) { + CastSinkExtraData cast_extra_data; + EXPECT_TRUE(cast_extra_data.ip_address.AssignFromIPLiteral(ip_address)); + cast_extra_data.model_name = model_name; + cast_extra_data.capabilities = 2; + cast_extra_data.cast_channel_id = 3; + return cast_extra_data; + } + + MediaSink media_sink() { return media_sink_; } + + private: + std::string sink_id_ = "sinkId123"; + std::string sink_name_ = "The sink"; + std::string ip_address_ = "192.168.1.2"; + std::string model_name_ = "model name"; + std::string app_url_ = "https://example.com"; + + MediaSink media_sink_; +}; + +TEST_F(MediaSinkInternalTest, TestIsValidSinkId) { + EXPECT_FALSE(MediaSinkInternal::IsValidSinkId("")); + EXPECT_TRUE(MediaSinkInternal::IsValidSinkId("rjuKv_yxhY4jg7QBIp0kbngLjR6A")); +} + +TEST_F(MediaSinkInternalTest, TestConstructorAndAssignment) { + MediaSink sink = media_sink(); + DialSinkExtraData dial_extra_data = CreateDialSinkExtraData(); + CastSinkExtraData cast_extra_data = CreateCastSinkExtraData(); + + MediaSinkInternal generic_sink; + generic_sink.set_sink(sink); + MediaSinkInternal dial_sink(sink, dial_extra_data); + MediaSinkInternal cast_sink(sink, cast_extra_data); + + MediaSinkInternal copied_generic_sink(generic_sink); + MediaSinkInternal copied_dial_sink(dial_sink); + MediaSinkInternal copied_cast_sink(cast_sink); + + ASSERT_TRUE(generic_sink == copied_generic_sink); + ASSERT_TRUE(dial_sink == copied_dial_sink); + ASSERT_TRUE(cast_sink == copied_cast_sink); + + MediaSinkInternal assigned_empty_sink; + MediaSinkInternal assigned_generic_sink = generic_sink; + MediaSinkInternal assigned_dial_sink = dial_sink; + MediaSinkInternal assigned_cast_sink = cast_sink; + + std::vector<MediaSinkInternal> assigned_sinks( + {assigned_empty_sink, assigned_generic_sink, assigned_dial_sink, + assigned_cast_sink}); + std::vector<MediaSinkInternal> original_sinks( + {generic_sink, dial_sink, cast_sink}); + + for (auto& actual_sink : assigned_sinks) { + for (const auto& original_sink : original_sinks) { + actual_sink = original_sink; + EXPECT_EQ(original_sink, actual_sink); + } + } +} + +TEST_F(MediaSinkInternalTest, TestSetExtraData) { + MediaSink sink = media_sink(); + DialSinkExtraData dial_extra_data = CreateDialSinkExtraData(); + CastSinkExtraData cast_extra_data = CreateCastSinkExtraData(); + + MediaSinkInternal dial_sink1; + dial_sink1.set_dial_data(dial_extra_data); + ASSERT_EQ(dial_extra_data, dial_sink1.dial_data()); + + MediaSinkInternal cast_sink1; + cast_sink1.set_cast_data(cast_extra_data); + ASSERT_EQ(cast_extra_data, cast_sink1.cast_data()); + + DialSinkExtraData dial_extra_data2 = CreateDialSinkExtraData( + "new_dial_model_name", "192.1.2.100", "https://example2.com"); + CastSinkExtraData cast_extra_data2 = + CreateCastSinkExtraData("new_cast_model_name", "192.1.2.101", 4, 5); + + MediaSinkInternal dial_sink2(sink, dial_extra_data); + dial_sink2.set_dial_data(dial_extra_data2); + ASSERT_EQ(dial_extra_data2, dial_sink2.dial_data()); + + MediaSinkInternal cast_sink2(sink, cast_extra_data); + cast_sink2.set_cast_data(cast_extra_data2); + ASSERT_EQ(cast_extra_data2, cast_sink2.cast_data()); +} + +} // namespace media_router
diff --git a/chrome/browser/media/router/media_sink.cc b/chrome/browser/media/router/media_sink.cc index 9686435..a484350 100644 --- a/chrome/browser/media/router/media_sink.cc +++ b/chrome/browser/media/router/media_sink.cc
@@ -25,6 +25,16 @@ return sink_id_ == other.sink_id_; } +bool MediaSink::operator==(const MediaSink& other) const { + return sink_id_ == other.sink_id_ && name_ == other.name_ && + description_ == other.description_ && domain_ == other.domain_ && + icon_type_ == other.icon_type_; +} + +bool MediaSink::operator!=(const MediaSink& other) const { + return !operator==(other); +} + bool MediaSink::CompareUsingCollator(const MediaSink& other, const icu::Collator* collator) const { if (icon_type_ != other.icon_type_)
diff --git a/chrome/browser/media/router/media_sink.h b/chrome/browser/media/router/media_sink.h index e348fe2..b1dd2941 100644 --- a/chrome/browser/media/router/media_sink.h +++ b/chrome/browser/media/router/media_sink.h
@@ -17,6 +17,7 @@ namespace media_router { // Represents a sink to which media can be routed. +// TODO(zhaobin): convert MediaSink into a struct. class MediaSink { public: using Id = std::string; @@ -59,8 +60,13 @@ void set_icon_type(IconType icon_type) { icon_type_ = icon_type; } IconType icon_type() const { return icon_type_; } + // This method only compares IDs. bool Equals(const MediaSink& other) const; + // This method compares all fields. + bool operator==(const MediaSink& other) const; + bool operator!=(const MediaSink& other) const; + // Compares |this| to |other| first by their icon types, then their names // using |collator|, and finally their IDs. bool CompareUsingCollator(const MediaSink& other,
diff --git a/chrome/browser/media/router/mojo/media_router.mojom b/chrome/browser/media/router/mojo/media_router.mojom index 37fc064..345bfb5 100644 --- a/chrome/browser/media/router/mojo/media_router.mojom +++ b/chrome/browser/media/router/mojo/media_router.mojom
@@ -5,7 +5,9 @@ module media_router.mojom; import "mojo/common/time.mojom"; +import "net/interfaces/ip_address.mojom"; import "url/mojo/origin.mojom"; +import "url/mojo/url.mojom"; // Represents an output sink to which media can be routed. struct MediaSink { @@ -27,6 +29,45 @@ string? domain; // The type of icon to show in the UI for this media sink. IconType icon_type; + // This is currently only set by MediaRouter in OnSinksDiscovered(). + MediaSinkExtraData? extra_data; +}; + +union MediaSinkExtraData { + DialMediaSink dial_media_sink; + CastMediaSink cast_media_sink; +}; + +struct DialMediaSink { + net.interfaces.IPAddress ip_address; + + // Model name of the sink, if it represents a physical device. + string model_name; + + // Used for DIAL launch + url.mojom.Url app_url; +}; + +struct CastMediaSink { + net.interfaces.IPAddress ip_address; + + // Model name of the sink, if it represents a physical device. + string model_name; + + // A bit vector representing capabilities of the sink. Meaning of capacity + // value for each bit: + // NONE: 0, + // VIDEO_OUT: 1 << 0, + // VIDEO_IN: 1 << 1, + // AUDIO_OUT: 1 << 2, + // AUDIO_IN: 1 << 3, + // DEV_MODE: 1 << 4, + // MULTIZONE_GROUP: 1 << 5 + uint8 capabilities; + + // ID of Cast channel opened by Media Router. The ID is defined by the + // chrome.cast.channel API. + int32 cast_channel_id; }; // Should be kept in sync with media_route.h.
diff --git a/chrome/browser/media/router/mojo/media_router.typemap b/chrome/browser/media/router/mojo/media_router.typemap index de2b10c..b0218eae4 100644 --- a/chrome/browser/media/router/mojo/media_router.typemap +++ b/chrome/browser/media/router/mojo/media_router.typemap
@@ -4,15 +4,17 @@ mojom = "//chrome/browser/media/router/mojo/media_router.mojom" public_headers = [ + "//chrome/browser/media/router/discovery/media_sink_internal.h", "//chrome/browser/media/router/issue.h", "//chrome/browser/media/router/media_route.h", - "//chrome/browser/media/router/media_sink.h", "//chrome/browser/media/router/route_message.h", "//chrome/browser/media/router/route_request_result.h", "//content/public/common/presentation_session.h", ] deps = [ + "//net", "//third_party/icu", # For issue.h + "//url", ] traits_headers = [ "//chrome/browser/media/router/mojo/media_router_struct_traits.h" ] @@ -26,7 +28,7 @@ "media_router.mojom.MediaRoute=media_router::MediaRoute", "media_router.mojom.MediaRouter.PresentationConnectionCloseReason=content::PresentationConnectionCloseReason", "media_router.mojom.MediaRouter.PresentationConnectionState=content::PresentationConnectionState", - "media_router.mojom.MediaSink=media_router::MediaSink", + "media_router.mojom.MediaSink=media_router::MediaSinkInternal", "media_router.mojom.RouteMessage=media_router::RouteMessage", "media_router.mojom.RouteRequestResultCode=media_router::RouteRequestResult::ResultCode", ]
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc index edec152b..ae0ce93 100644 --- a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc +++ b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc
@@ -174,7 +174,7 @@ void MediaRouterMojoImpl::OnSinksReceived( const std::string& media_source, - const std::vector<MediaSink>& sinks, + const std::vector<MediaSinkInternal>& internal_sinks, const std::vector<url::Origin>& origins) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DVLOG_WITH_INSTANCE(1) << "OnSinksReceived"; @@ -184,6 +184,11 @@ return; } + std::vector<MediaSink> sinks; + sinks.reserve(internal_sinks.size()); + for (const auto& internal_sink : internal_sinks) + sinks.push_back(internal_sink.sink()); + auto* sinks_query = it->second.get(); sinks_query->cached_sink_list = sinks; sinks_query->origins = origins;
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl.h b/chrome/browser/media/router/mojo/media_router_mojo_impl.h index b5c0d70..8601ffea 100644 --- a/chrome/browser/media/router/mojo/media_router_mojo_impl.h +++ b/chrome/browser/media/router/mojo/media_router_mojo_impl.h
@@ -294,7 +294,7 @@ callback) override; void OnIssue(const IssueInfo& issue) override; void OnSinksReceived(const std::string& media_source, - const std::vector<MediaSink>& sinks, + const std::vector<MediaSinkInternal>& internal_sinks, const std::vector<url::Origin>& origins) override; void OnRoutesUpdated( const std::vector<MediaRoute>& routes,
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc b/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc index 20dfac3..4c6139a 100644 --- a/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc +++ b/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc
@@ -697,13 +697,20 @@ expected_sinks.push_back( MediaSink(kSinkId2, kSinkName, MediaSink::IconType::CAST)); + std::vector<MediaSinkInternal> sinks; + for (const auto& expected_sink : expected_sinks) { + MediaSinkInternal sink_internal; + sink_internal.set_sink(expected_sink); + sinks.push_back(sink_internal); + } + base::RunLoop run_loop; EXPECT_CALL(*sinks_observer, OnSinksReceived(SequenceEquals(expected_sinks))); EXPECT_CALL(*extra_sinks_observer, OnSinksReceived(SequenceEquals(expected_sinks))) .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); media_router_proxy_->OnSinksReceived( - media_source.id(), expected_sinks, + media_source.id(), sinks, std::vector<url::Origin>(1, url::Origin(GURL(kOrigin)))); run_loop.Run();
diff --git a/chrome/browser/media/router/mojo/media_router_struct_traits.cc b/chrome/browser/media/router/mojo/media_router_struct_traits.cc index 47e9283b..6115362 100644 --- a/chrome/browser/media/router/mojo/media_router_struct_traits.cc +++ b/chrome/browser/media/router/mojo/media_router_struct_traits.cc
@@ -5,6 +5,8 @@ #include "chrome/browser/media/router/mojo/media_router_struct_traits.h" #include "chrome/browser/media/router/media_source.h" +#include "net/interfaces/ip_address_struct_traits.h" +#include "url/mojo/url_gurl_struct_traits.h" namespace mojo { @@ -43,13 +45,31 @@ } // static -bool StructTraits< - media_router::mojom::MediaSinkDataView, - media_router::MediaSink>::Read(media_router::mojom::MediaSinkDataView data, - media_router::MediaSink* out) { +media_router::mojom::MediaSinkExtraDataDataView::Tag +UnionTraits<media_router::mojom::MediaSinkExtraDataDataView, + media_router::MediaSinkInternal>:: + GetTag(const media_router::MediaSinkInternal& sink) { + if (sink.is_dial_sink()) { + return media_router::mojom::MediaSinkExtraDataDataView::Tag:: + DIAL_MEDIA_SINK; + } else if (sink.is_cast_sink()) { + return media_router::mojom::MediaSinkExtraDataDataView::Tag:: + CAST_MEDIA_SINK; + } + NOTREACHED(); + return media_router::mojom::MediaSinkExtraDataDataView::Tag::CAST_MEDIA_SINK; +} + +// static +bool StructTraits<media_router::mojom::MediaSinkDataView, + media_router::MediaSinkInternal>:: + Read(media_router::mojom::MediaSinkDataView data, + media_router::MediaSinkInternal* out) { media_router::MediaSink::Id id; - if (!data.ReadSinkId(&id)) + if (!data.ReadSinkId(&id) || + !media_router::MediaSinkInternal::IsValidSinkId(id)) { return false; + } out->set_sink_id(id); @@ -79,10 +99,73 @@ out->set_icon_type(icon_type); + if (!data.ReadExtraData(out)) + return false; + return true; } // static +bool UnionTraits<media_router::mojom::MediaSinkExtraDataDataView, + media_router::MediaSinkInternal>:: + Read(media_router::mojom::MediaSinkExtraDataDataView data, + media_router::MediaSinkInternal* out) { + switch (data.tag()) { + case media_router::mojom::MediaSinkExtraDataDataView::Tag:: + DIAL_MEDIA_SINK: { + media_router::DialSinkExtraData extra_data; + if (!data.ReadDialMediaSink(&extra_data)) + return false; + out->set_dial_data(extra_data); + return true; + } + case media_router::mojom::MediaSinkExtraDataDataView::Tag:: + CAST_MEDIA_SINK: { + media_router::CastSinkExtraData extra_data; + if (!data.ReadCastMediaSink(&extra_data)) + return false; + out->set_cast_data(extra_data); + return true; + } + } + NOTREACHED(); + return false; +} + +// static +bool StructTraits<media_router::mojom::DialMediaSinkDataView, + media_router::DialSinkExtraData>:: + Read(media_router::mojom::DialMediaSinkDataView data, + media_router::DialSinkExtraData* out) { + if (!data.ReadIpAddress(&out->ip_address)) + return false; + + if (!data.ReadModelName(&out->model_name)) + return false; + + if (!data.ReadAppUrl(&out->app_url)) + return false; + + return true; +} + +// static +bool StructTraits<media_router::mojom::CastMediaSinkDataView, + media_router::CastSinkExtraData>:: + Read(media_router::mojom::CastMediaSinkDataView data, + media_router::CastSinkExtraData* out) { + if (!data.ReadIpAddress(&out->ip_address)) + return false; + + if (!data.ReadModelName(&out->model_name)) + return false; + + out->capabilities = data.capabilities(); + out->cast_channel_id = data.cast_channel_id(); + + return true; +} + bool StructTraits<media_router::mojom::MediaRouteDataView, media_router::MediaRoute>:: Read(media_router::mojom::MediaRouteDataView data,
diff --git a/chrome/browser/media/router/mojo/media_router_struct_traits.h b/chrome/browser/media/router/mojo/media_router_struct_traits.h index 1c6623fc..479586cd 100644 --- a/chrome/browser/media/router/mojo/media_router_struct_traits.h +++ b/chrome/browser/media/router/mojo/media_router_struct_traits.h
@@ -7,8 +7,8 @@ #include <string> +#include "chrome/browser/media/router/discovery/media_sink_internal.h" #include "chrome/browser/media/router/issue.h" -#include "chrome/browser/media/router/media_sink.h" #include "chrome/browser/media/router/mojo/media_router.mojom.h" #include "chrome/browser/media/router/route_request_result.h" #include "mojo/common/common_custom_types_struct_traits.h" @@ -81,6 +81,81 @@ }; template <> +struct UnionTraits<media_router::mojom::MediaSinkExtraDataDataView, + media_router::MediaSinkInternal> { + static media_router::mojom::MediaSinkExtraDataDataView::Tag GetTag( + const media_router::MediaSinkInternal& sink); + + static bool IsNull(const media_router::MediaSinkInternal& sink) { + return !sink.is_cast_sink() && !sink.is_dial_sink(); + } + + static void SetToNull(media_router::MediaSinkInternal* out) {} + + static const media_router::DialSinkExtraData& dial_media_sink( + const media_router::MediaSinkInternal& sink) { + return sink.dial_data(); + } + + static const media_router::CastSinkExtraData& cast_media_sink( + const media_router::MediaSinkInternal& sink) { + return sink.cast_data(); + } + + static bool Read(media_router::mojom::MediaSinkExtraDataDataView data, + media_router::MediaSinkInternal* out); +}; + +template <> +struct StructTraits<media_router::mojom::DialMediaSinkDataView, + media_router::DialSinkExtraData> { + static const std::string& model_name( + const media_router::DialSinkExtraData& extra_data) { + return extra_data.model_name; + } + + static const net::IPAddress& ip_address( + const media_router::DialSinkExtraData& extra_data) { + return extra_data.ip_address; + } + + static const GURL& app_url( + const media_router::DialSinkExtraData& extra_data) { + return extra_data.app_url; + } + + static bool Read(media_router::mojom::DialMediaSinkDataView data, + media_router::DialSinkExtraData* out); +}; + +template <> +struct StructTraits<media_router::mojom::CastMediaSinkDataView, + media_router::CastSinkExtraData> { + static const std::string& model_name( + const media_router::CastSinkExtraData& extra_data) { + return extra_data.model_name; + } + + static const net::IPAddress& ip_address( + const media_router::CastSinkExtraData& extra_data) { + return extra_data.ip_address; + } + + static uint8_t capabilities( + const media_router::CastSinkExtraData& extra_data) { + return extra_data.capabilities; + } + + static int32_t cast_channel_id( + const media_router::CastSinkExtraData& extra_data) { + return extra_data.cast_channel_id; + } + + static bool Read(media_router::mojom::CastMediaSinkDataView data, + media_router::CastSinkExtraData* out); +}; + +template <> struct StructTraits<media_router::mojom::RouteMessageDataView, media_router::RouteMessage> { static media_router::mojom::RouteMessage::Type type( @@ -228,31 +303,38 @@ template <> struct StructTraits<media_router::mojom::MediaSinkDataView, - media_router::MediaSink> { + media_router::MediaSinkInternal> { static bool Read(media_router::mojom::MediaSinkDataView data, - media_router::MediaSink* out); + media_router::MediaSinkInternal* out); - static std::string sink_id(const media_router::MediaSink& sink) { - return sink.id(); + static std::string sink_id( + const media_router::MediaSinkInternal& sink_internal) { + return sink_internal.sink().id(); } - static std::string name(const media_router::MediaSink& sink) { - return sink.name(); + static std::string name( + const media_router::MediaSinkInternal& sink_internal) { + return sink_internal.sink().name(); } static base::Optional<std::string> description( - const media_router::MediaSink& sink) { - return sink.description(); + const media_router::MediaSinkInternal& sink_internal) { + return sink_internal.sink().description(); } static base::Optional<std::string> domain( - const media_router::MediaSink& sink) { - return sink.domain(); + const media_router::MediaSinkInternal& sink_internal) { + return sink_internal.sink().domain(); } static media_router::MediaSink::IconType icon_type( - const media_router::MediaSink& sink) { - return sink.icon_type(); + const media_router::MediaSinkInternal& sink_internal) { + return sink_internal.sink().icon_type(); + } + + static const media_router::MediaSinkInternal& extra_data( + const media_router::MediaSinkInternal& sink_internal) { + return sink_internal; } };
diff --git a/chrome/browser/media/router/mojo/media_router_struct_traits_unittest.cc b/chrome/browser/media/router/mojo/media_router_struct_traits_unittest.cc new file mode 100644 index 0000000..753c4315 --- /dev/null +++ b/chrome/browser/media/router/mojo/media_router_struct_traits_unittest.cc
@@ -0,0 +1,117 @@ +// Copyright 2017 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. + +#include "chrome/browser/media/router/mojo/media_router_struct_traits.h" + +#include "base/message_loop/message_loop.h" +#include "chrome/browser/media/router/discovery/media_sink_internal.h" +#include "chrome/browser/media/router/mojo/media_router.mojom.h" +#include "chrome/browser/media/router/mojo/media_router_traits_test_service.mojom.h" +#include "mojo/public/cpp/bindings/binding_set.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace media_router { + +class MediaRouterStructTraitsTest + : public testing::Test, + public media_router::mojom::MediaRouterTraitsTestService { + public: + MediaRouterStructTraitsTest() {} + + protected: + mojom::MediaRouterTraitsTestServicePtr GetTraitsTestProxy() { + return traits_test_bindings_.CreateInterfacePtrAndBind(this); + } + + private: + // MediaRouterTraitsTestService Impl + void EchoMediaSink(const MediaSinkInternal& sink, + const EchoMediaSinkCallback& callback) override { + callback.Run(sink); + } + + base::MessageLoop loop_; + mojo::BindingSet<MediaRouterTraitsTestService> traits_test_bindings_; + + DISALLOW_COPY_AND_ASSIGN(MediaRouterStructTraitsTest); +}; + +TEST_F(MediaRouterStructTraitsTest, DialMediaSink) { + MediaSink::Id sink_id("sinkId123"); + std::string sink_name("The sink"); + MediaSink::IconType icon_type(MediaSink::IconType::CAST); + std::string ip_address("192.168.1.2"); + std::string model_name("model name"); + GURL app_url("https://example.com"); + + MediaSink sink(sink_id, sink_name, icon_type); + DialSinkExtraData extra_data; + EXPECT_TRUE(extra_data.ip_address.AssignFromIPLiteral(ip_address)); + extra_data.model_name = model_name; + extra_data.app_url = app_url; + + MediaSinkInternal dial_sink(sink, extra_data); + + mojom::MediaRouterTraitsTestServicePtr proxy = GetTraitsTestProxy(); + MediaSinkInternal output; + proxy->EchoMediaSink(dial_sink, &output); + + EXPECT_EQ(sink_id, output.sink().id()); + EXPECT_EQ(sink_name, output.sink().name()); + EXPECT_EQ(icon_type, output.sink().icon_type()); + EXPECT_EQ(ip_address, output.dial_data().ip_address.ToString()); + EXPECT_EQ(model_name, output.dial_data().model_name); + EXPECT_EQ(app_url, output.dial_data().app_url); +} + +TEST_F(MediaRouterStructTraitsTest, CastMediaSink) { + MediaSink::Id sink_id("sinkId123"); + std::string sink_name("The sink"); + MediaSink::IconType icon_type(MediaSink::IconType::CAST); + std::string ip_address("192.168.1.2"); + std::string model_name("model name"); + + MediaSink sink(sink_id, sink_name, icon_type); + CastSinkExtraData extra_data; + EXPECT_TRUE(extra_data.ip_address.AssignFromIPLiteral(ip_address)); + extra_data.model_name = model_name; + extra_data.capabilities = 2; + extra_data.cast_channel_id = 3; + + MediaSinkInternal cast_sink(sink, extra_data); + + mojom::MediaRouterTraitsTestServicePtr proxy = GetTraitsTestProxy(); + MediaSinkInternal output; + proxy->EchoMediaSink(cast_sink, &output); + + EXPECT_EQ(sink_id, output.sink().id()); + EXPECT_EQ(sink_name, output.sink().name()); + EXPECT_EQ(icon_type, output.sink().icon_type()); + EXPECT_EQ(ip_address, output.cast_data().ip_address.ToString()); + EXPECT_EQ(model_name, output.cast_data().model_name); + EXPECT_EQ(2, output.cast_data().capabilities); + EXPECT_EQ(3, output.cast_data().cast_channel_id); +} + +TEST_F(MediaRouterStructTraitsTest, GenericMediaSink) { + MediaSink::Id sink_id("sinkId123"); + std::string sink_name("The sink"); + MediaSink::IconType icon_type(MediaSink::IconType::CAST); + + MediaSink sink(sink_id, sink_name, icon_type); + MediaSinkInternal generic_sink; + generic_sink.set_sink(sink); + + mojom::MediaRouterTraitsTestServicePtr proxy = GetTraitsTestProxy(); + MediaSinkInternal output; + proxy->EchoMediaSink(generic_sink, &output); + + EXPECT_EQ(sink_id, output.sink().id()); + EXPECT_EQ(sink_name, output.sink().name()); + EXPECT_EQ(icon_type, output.sink().icon_type()); + EXPECT_FALSE(output.is_cast_sink()); + EXPECT_FALSE(output.is_dial_sink()); +} + +} // namespace media_router
diff --git a/chrome/browser/media/router/mojo/media_router_traits_test_service.mojom b/chrome/browser/media/router/mojo/media_router_traits_test_service.mojom new file mode 100644 index 0000000..9229fd8 --- /dev/null +++ b/chrome/browser/media/router/mojo/media_router_traits_test_service.mojom
@@ -0,0 +1,14 @@ +// Copyright 2017 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. + +module media_router.mojom; + +import "chrome/browser/media/router/mojo/media_router.mojom"; + +// All functions on this interface echo their arguments to test StructTraits +// serialization and deserialization. +interface MediaRouterTraitsTestService { + [Sync] + EchoMediaSink(MediaSink s) => (MediaSink sink); +};
diff --git a/chrome/browser/resources/feedback/OWNERS b/chrome/browser/resources/feedback/OWNERS index 13e3b59..b9f340d 100644 --- a/chrome/browser/resources/feedback/OWNERS +++ b/chrome/browser/resources/feedback/OWNERS
@@ -1,2 +1,4 @@ afakhry@chromium.org steel@chromium.org + +# COMPONENT: Platform>Apps>Feedback
diff --git a/chrome/browser/resources/settings/controls/settings_boolean_control_behavior.js b/chrome/browser/resources/settings/controls/settings_boolean_control_behavior.js index ffb43f0..0b45e03 100644 --- a/chrome/browser/resources/settings/controls/settings_boolean_control_behavior.js +++ b/chrome/browser/resources/settings/controls/settings_boolean_control_behavior.js
@@ -63,7 +63,6 @@ */ numericUncheckedValue: { type: Number, - readOnly: true, value: 0, } },
diff --git a/chrome/browser/resources/settings/privacy_page/compiled_resources2.gyp b/chrome/browser/resources/settings/privacy_page/compiled_resources2.gyp index c842549..50ac0e5c 100644 --- a/chrome/browser/resources/settings/privacy_page/compiled_resources2.gyp +++ b/chrome/browser/resources/settings/privacy_page/compiled_resources2.gyp
@@ -18,6 +18,7 @@ '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:i18n_behavior', '<(DEPTH)/ui/webui/resources/js/compiled_resources2.gyp:web_ui_listener_behavior', '../compiled_resources2.gyp:route', + '../controls/compiled_resources2.gyp:settings_toggle_button', '../settings_page/compiled_resources2.gyp:settings_animated_pages', '../settings_ui/compiled_resources2.gyp:settings_ui_types', '../site_settings/compiled_resources2.gyp:constants',
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html index 3e2e0de..14f4422 100644 --- a/chrome/browser/resources/settings/privacy_page/privacy_page.html +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html
@@ -1,4 +1,5 @@ <link rel="import" href="chrome://resources/html/polymer.html"> +<link rel="import" href="chrome://resources/cr_elements/cr_dialog/cr_dialog.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_vars_css.html"> <link rel="import" href="chrome://resources/html/i18n_behavior.html"> <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> @@ -109,9 +110,28 @@ </if><!-- not chromeos --> </if><!-- _google_chrome --> <div class="settings-box"> - <settings-toggle-button class="start" - pref="{{prefs.enable_do_not_track}}" - label="$i18n{doNotTrack}"> + <template id="doNotTrackDialogIf" is="dom-if" + if="[[showDoNotTrackDialog_]]"> + <dialog is="cr-dialog" id="confirmDoNotTrackDialog" + close-text="$i18n{close}" on-cancel="onDoNotTrackDialogCancel_"> + <div class="title">$i18n{doNotTrackDialogTitle}</div> + <div class="body">$i18nRaw{doNotTrackDialogMessage}</div> + <div class="button-container"> + <paper-button class="cancel-button" + on-tap="onDoNotTrackDialogCancel_"> + $i18n{cancel} + </paper-button> + <paper-button class="action-button" + on-tap="onDoNotTrackDialogConfirm_"> + $i18n{confirm} + </paper-button> + </div> + </dialog> + </template> + <settings-toggle-button id="doNotTrack" class="start" + pref="{{prefs.enable_do_not_track}}" label="$i18n{doNotTrack}" + on-settings-boolean-control-change="onDoNotTrackChange_" + no-set-pref> </settings-toggle-button> </div> <if expr="chromeos"> @@ -243,7 +263,7 @@ "$i18n{siteSettingsAskBeforeAccessingRecommended}"> </category-default-setting> <category-setting-exceptions - category="{{ContentSettingsTypes.CAMERA}}"> + category="{{ContentSettingsTypes.CAMERA}}" read-only-list> </category-setting-exceptions> </settings-subpage> </template> @@ -287,7 +307,7 @@ category="{{ContentSettingsTypes.GEOLOCATION}}"> </category-default-setting> <category-setting-exceptions - category="{{ContentSettingsTypes.GEOLOCATION}}"> + category="{{ContentSettingsTypes.GEOLOCATION}}" read-only-list> </category-setting-exceptions> </settings-subpage> </template> @@ -329,7 +349,8 @@ toggle-on-label= "$i18n{siteSettingsAskBeforeAccessingRecommended}"> </category-default-setting> - <category-setting-exceptions category="{{ContentSettingsTypes.MIC}}"> + <category-setting-exceptions + category="{{ContentSettingsTypes.MIC}}" read-only-list> </category-setting-exceptions> </settings-subpage> </template> @@ -399,7 +420,7 @@ category="{{ContentSettingsTypes.MIDI_DEVICES}}"> </category-default-setting> <category-setting-exceptions - category="{{ContentSettingsTypes.MIDI_DEVICES}}"> + category="{{ContentSettingsTypes.MIDI_DEVICES}}" read-only-list> </category-setting-exceptions> </settings-subpage> </template>
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.js b/chrome/browser/resources/settings/privacy_page/privacy_page.js index 825633f9..1721100 100644 --- a/chrome/browser/resources/settings/privacy_page/privacy_page.js +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.js
@@ -77,6 +77,12 @@ /** @private */ showClearBrowsingDataDialog_: Boolean, + /** @private */ + showDoNotTrackDialog_: { + type: Boolean, + value: false, + }, + /** * Used for HTML bindings. This is defined as a property rather than within * the ready callback, because the value needs to be available before @@ -89,6 +95,10 @@ }, }, + listeners: { + 'doNotTrackDialogIf.dom-change': 'onDoNotTrackDomChange_', + }, + ready: function() { this.ContentSettingsTypes = settings.ContentSettingsTypes; @@ -111,6 +121,68 @@ settings.getCurrentRoute() == settings.Route.CLEAR_BROWSER_DATA; }, + /** + * @param {Event} event + * @private + */ + onDoNotTrackDomChange_: function(event) { + if (this.showDoNotTrackDialog_) + this.maybeShowDoNotTrackDialog_(); + }, + + /** + * Handles the change event for the do-not-track toggle. Shows a + * confirmation dialog when enabling the setting. + * @param {Event} event + * @private + */ + onDoNotTrackChange_: function(event) { + var target = /** @type {!SettingsToggleButtonElement} */(event.target); + if (!target.checked) { + // Always allow disabling the pref. + target.sendPrefChange(); + return; + } + this.showDoNotTrackDialog_ = true; + // If the dialog has already been stamped, show it. Otherwise it will be + // shown in onDomChange_. + this.maybeShowDoNotTrackDialog_(); + }, + + /** @private */ + maybeShowDoNotTrackDialog_: function() { + var dialog = this.$$('#confirmDoNotTrackDialog'); + if (dialog && !dialog.open) + dialog.showModal(); + }, + + /** @private */ + closeDoNotTrackDialog_: function() { + this.$$('#confirmDoNotTrackDialog').close(); + this.showDoNotTrackDialog_ = false; + }, + + /** + * Handles the shared proxy confirmation dialog 'Confirm' button. + * @private + */ + onDoNotTrackDialogConfirm_: function() { + /** @type {!SettingsToggleButtonElement} */ (this.$.doNotTrack) + .sendPrefChange(); + this.closeDoNotTrackDialog_(); + }, + + /** + * Handles the shared proxy confirmation dialog 'Cancel' button or a cancel + * event. + * @private + */ + onDoNotTrackDialogCancel_: function() { + /** @type {!SettingsToggleButtonElement} */ (this.$.doNotTrack) + .resetToPrefValue(); + this.closeDoNotTrackDialog_(); + }, + /** @private */ onManageCertificatesTap_: function() { // <if expr="use_nss_certs">
diff --git a/chrome/browser/resources/settings/site_settings/category_setting_exceptions.html b/chrome/browser/resources/settings/site_settings/category_setting_exceptions.html index 3fe8e0f..02143c79 100644 --- a/chrome/browser/resources/settings/site_settings/category_setting_exceptions.html +++ b/chrome/browser/resources/settings/site_settings/category_setting_exceptions.html
@@ -17,17 +17,20 @@ <site-list category="[[category]]" category-subtype="[[PermissionValues.BLOCK]]" - category-header="$i18n{siteSettingsBlock}"> + category-header="$i18n{siteSettingsBlock}" + read-only-list="[[readOnlyList]]"> </site-list> <site-list category="[[category]]" category-subtype="[[PermissionValues.SESSION_ONLY]]" - category-header="$i18n{siteSettingsSessionOnly}"> + category-header="$i18n{siteSettingsSessionOnly}" + read-only-list="[[readOnlyList]]"> </site-list> <site-list category="[[category]]" category-subtype="[[PermissionValues.ALLOW]]" - category-header="$i18n{siteSettingsAllow}"> + category-header="$i18n{siteSettingsAllow}" + read-only-list="[[readOnlyList]]"> </site-list> </template> <script src="category_setting_exceptions.js"></script>
diff --git a/chrome/browser/resources/settings/site_settings/category_setting_exceptions.js b/chrome/browser/resources/settings/site_settings/category_setting_exceptions.js index 4a972fa..0e457fe 100644 --- a/chrome/browser/resources/settings/site_settings/category_setting_exceptions.js +++ b/chrome/browser/resources/settings/site_settings/category_setting_exceptions.js
@@ -10,6 +10,18 @@ Polymer({ is: 'category-setting-exceptions', + properties: { + /** + * Some content types (like Location) do not allow the user to manually + * edit the exception list from within Settings. + * @private + */ + readOnlyList: { + type: Boolean, + value: false, + }, + }, + /** @override */ ready: function() { this.PermissionValues = settings.PermissionValues;
diff --git a/chrome/browser/resources/settings/site_settings/site_list.html b/chrome/browser/resources/settings/site_settings/site_list.html index 106409c..1dc7c8b9 100644 --- a/chrome/browser/resources/settings/site_settings/site_list.html +++ b/chrome/browser/resources/settings/site_settings/site_list.html
@@ -30,7 +30,7 @@ <div class="settings-box first" hidden$="[[allSites]]"> <h2 class="start">[[categoryHeader]]</h2> <paper-button class="secondary-button header-aligned-button" id="icon" - on-tap="onAddSiteTap_"> + hidden="[[readOnlyList]]" on-tap="onAddSiteTap_"> $i18n{add} </paper-button> </div> @@ -81,7 +81,7 @@ </template> <paper-icon-button id="dots" icon="cr:more-vert" - hidden="[[isActionMenuHidden_(item.source)]]" + hidden="[[isActionMenuHidden_(item.source, readOnlyList)]]" on-tap="onShowActionMenuTap_" title="$i18n{moreActions}"> </paper-icon-button> <template is="dom-if" if="[[enableSiteSettings_]]">
diff --git a/chrome/browser/resources/settings/site_settings/site_list.js b/chrome/browser/resources/settings/site_settings/site_list.js index 86bbc03..ddfe126 100644 --- a/chrome/browser/resources/settings/site_settings/site_list.js +++ b/chrome/browser/resources/settings/site_settings/site_list.js
@@ -35,6 +35,16 @@ }, /** + * Some content types (like Location) do not allow the user to manually + * edit the exception list from within Settings. + * @private + */ + readOnlyList: { + type: Boolean, + value: false, + }, + + /** * The site serving as the model for the currently open action menu. * @private {?SiteException} */ @@ -206,11 +216,12 @@ /** * @param {string} source Where the setting came from. + * @param {boolean} readOnlyList Whether the site exception list is read-only. * @return {boolean} * @private */ - isActionMenuHidden_: function(source) { - return this.isExceptionControlled_(source) || this.allSites; + isActionMenuHidden_: function(source, readOnlyList) { + return this.isExceptionControlled_(source) || this.allSites || readOnlyList; }, /** @@ -219,6 +230,7 @@ * @private */ onAddSiteTap_: function(e) { + assert(!this.readOnlyList); e.preventDefault(); var dialog = document.createElement('add-site-dialog'); dialog.category = this.category;
diff --git a/chrome/browser/task_manager/OWNERS b/chrome/browser/task_manager/OWNERS index 422a446f..d472cb41 100644 --- a/chrome/browser/task_manager/OWNERS +++ b/chrome/browser/task_manager/OWNERS
@@ -1,2 +1,4 @@ afakhry@chromium.org nick@chromium.org + +# COMPONENT: UI>TaskManager
diff --git a/chrome/browser/ui/android/bluetooth_chooser_android.cc b/chrome/browser/ui/android/bluetooth_chooser_android.cc index a15fe99..c81b2504 100644 --- a/chrome/browser/ui/android/bluetooth_chooser_android.cc +++ b/chrome/browser/ui/android/bluetooth_chooser_android.cc
@@ -109,13 +109,6 @@ env, java_dialog_, java_device_id, java_device_name); } -void BluetoothChooserAndroid::RemoveDevice(const std::string& device_id) { - JNIEnv* env = AttachCurrentThread(); - ScopedJavaLocalRef<jstring> java_device_id = - ConvertUTF16ToJavaString(env, base::UTF8ToUTF16(device_id)); - Java_BluetoothChooserDialog_removeDevice(env, java_dialog_, java_device_id); -} - void BluetoothChooserAndroid::OnDialogFinished( JNIEnv* env, const JavaParamRef<jobject>& obj,
diff --git a/chrome/browser/ui/android/bluetooth_chooser_android.h b/chrome/browser/ui/android/bluetooth_chooser_android.h index 1c2e0ac..899ad48 100644 --- a/chrome/browser/ui/android/bluetooth_chooser_android.h +++ b/chrome/browser/ui/android/bluetooth_chooser_android.h
@@ -28,7 +28,6 @@ bool is_gatt_connected, bool is_paired, int signal_strength_level) override; - void RemoveDevice(const std::string& device_id) override; // Report the dialog's result. void OnDialogFinished(JNIEnv* env,
diff --git a/chrome/browser/ui/app_list/arc/arc_app_utils.cc b/chrome/browser/ui/app_list/arc/arc_app_utils.cc index a4eb8be4..417df32 100644 --- a/chrome/browser/ui/app_list/arc/arc_app_utils.cc +++ b/chrome/browser/ui/app_list/arc/arc_app_utils.cc
@@ -12,6 +12,7 @@ #include "base/json/json_writer.h" #include "base/synchronization/waitable_event.h" #include "base/values.h" +#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" @@ -289,6 +290,21 @@ // Only reachable when ARC always starts. DCHECK(arc::ShouldArcAlwaysStart()); } + } else { + // Handle the case when default app tries to re-activate OptIn flow. + if (IsArcPlayStoreEnabledPreferenceManagedForProfile(profile) && + !ArcSessionManager::Get()->enable_requested() && + prefs->IsDefault(app_id)) { + SetArcPlayStoreEnabledForProfile(profile, true); + // PlayStore item has special handling for shelf controllers. In order + // to avoid unwanted initial animation for PlayStore item do not create + // deferred launch request when PlayStore item enables Google Play + // Store. + if (app_id == kPlayStoreAppId) { + prefs->SetLastLaunchTime(app_id, base::Time::Now()); + return true; + } + } } ChromeLauncherController* chrome_controller =
diff --git a/chrome/browser/ui/ash/launcher/arc_playstore_shortcut_launcher_item_controller.cc b/chrome/browser/ui/ash/launcher/arc_playstore_shortcut_launcher_item_controller.cc index 0ab7bdcc..9f445f5 100644 --- a/chrome/browser/ui/ash/launcher/arc_playstore_shortcut_launcher_item_controller.cc +++ b/chrome/browser/ui/ash/launcher/arc_playstore_shortcut_launcher_item_controller.cc
@@ -8,7 +8,6 @@ #include "chrome/browser/chromeos/arc/arc_support_host.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/app_list/arc/arc_app_launcher.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" #include "chrome/browser/ui/app_list/arc/arc_app_utils.h" #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" @@ -32,20 +31,10 @@ ArcAppListPrefs* arc_app_prefs = ArcAppListPrefs::Get(profile); DCHECK(arc_app_prefs); - const bool play_store_was_enabled = - arc::IsArcPlayStoreEnabledForProfile(profile); - arc::SetArcPlayStoreEnabledForProfile(profile, true); - - // Deferred launcher. - if (arc_app_prefs->IsRegistered(arc::kPlayStoreAppId) && - play_store_was_enabled) { - // Known apps can be launched directly or deferred. - arc::LaunchApp(profile, arc::kPlayStoreAppId, true); - } else { - // Launch Play Store once its app appears. - playstore_launcher_ = - base::MakeUnique<ArcAppLauncher>(profile, arc::kPlayStoreAppId, true); - } + // Play Store should always be registered and arc::LaunchApp can handle all + // cases. + DCHECK(arc_app_prefs->IsRegistered(arc::kPlayStoreAppId)); + arc::LaunchApp(profile, arc::kPlayStoreAppId, true); callback.Run(ash::SHELF_ACTION_NONE, GetAppMenuItems(event ? event->flags() : ui::EF_NONE));
diff --git a/chrome/browser/ui/ash/launcher/arc_playstore_shortcut_launcher_item_controller.h b/chrome/browser/ui/ash/launcher/arc_playstore_shortcut_launcher_item_controller.h index fa3e689..ce1ad68a 100644 --- a/chrome/browser/ui/ash/launcher/arc_playstore_shortcut_launcher_item_controller.h +++ b/chrome/browser/ui/ash/launcher/arc_playstore_shortcut_launcher_item_controller.h
@@ -10,13 +10,12 @@ #include "base/macros.h" #include "chrome/browser/ui/ash/launcher/app_shortcut_launcher_item_controller.h" -class ArcAppLauncher; class ChromeLauncherController; class ArcPlaystoreShortcutLauncherItemController : public AppShortcutLauncherItemController { public: - ArcPlaystoreShortcutLauncherItemController( + explicit ArcPlaystoreShortcutLauncherItemController( ChromeLauncherController* controller); ~ArcPlaystoreShortcutLauncherItemController() override; @@ -27,8 +26,6 @@ const ItemSelectedCallback& callback) override; private: - std::unique_ptr<ArcAppLauncher> playstore_launcher_; - DISALLOW_COPY_AND_ASSIGN(ArcPlaystoreShortcutLauncherItemController); };
diff --git a/chrome/browser/ui/bluetooth/bluetooth_chooser_desktop.cc b/chrome/browser/ui/bluetooth/bluetooth_chooser_desktop.cc index e23712b..aeff9df 100644 --- a/chrome/browser/ui/bluetooth/bluetooth_chooser_desktop.cc +++ b/chrome/browser/ui/bluetooth/bluetooth_chooser_desktop.cc
@@ -39,7 +39,3 @@ device_id, should_update_name, device_name, is_gatt_connected, is_paired, signal_strength_level); } - -void BluetoothChooserDesktop::RemoveDevice(const std::string& device_id) { - bluetooth_chooser_controller_->RemoveDevice(device_id); -}
diff --git a/chrome/browser/ui/bluetooth/bluetooth_chooser_desktop.h b/chrome/browser/ui/bluetooth/bluetooth_chooser_desktop.h index cbfb5d3..cc384e6 100644 --- a/chrome/browser/ui/bluetooth/bluetooth_chooser_desktop.h +++ b/chrome/browser/ui/bluetooth/bluetooth_chooser_desktop.h
@@ -28,7 +28,6 @@ bool is_gatt_connected, bool is_paired, int signal_strength_level) override; - void RemoveDevice(const std::string& device_id) override; private: // Weak. DeviceChooserContentView[Cocoa] owns it.
diff --git a/chrome/browser/ui/bluetooth/chrome_extension_bluetooth_chooser.cc b/chrome/browser/ui/bluetooth/chrome_extension_bluetooth_chooser.cc index 044006e..58515e2 100644 --- a/chrome/browser/ui/bluetooth/chrome_extension_bluetooth_chooser.cc +++ b/chrome/browser/ui/bluetooth/chrome_extension_bluetooth_chooser.cc
@@ -44,8 +44,3 @@ device_id, should_update_name, device_name, is_gatt_connected, is_paired, signal_strength_level); } - -void ChromeExtensionBluetoothChooser::RemoveDevice( - const std::string& device_id) { - bluetooth_chooser_controller_->RemoveDevice(device_id); -}
diff --git a/chrome/browser/ui/bluetooth/chrome_extension_bluetooth_chooser.h b/chrome/browser/ui/bluetooth/chrome_extension_bluetooth_chooser.h index e0f7962..273e165 100644 --- a/chrome/browser/ui/bluetooth/chrome_extension_bluetooth_chooser.h +++ b/chrome/browser/ui/bluetooth/chrome_extension_bluetooth_chooser.h
@@ -35,7 +35,6 @@ bool is_gatt_connected, bool is_paired, int signal_strength_level) override; - void RemoveDevice(const std::string& device_id) override; private: // Weak. DeviceChooserContentView[Cocoa] owns it.
diff --git a/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm b/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm index a59f0204..b3dcc322 100644 --- a/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm +++ b/chrome/browser/ui/cocoa/tabs/tab_strip_view.mm
@@ -85,6 +85,12 @@ } else { strokeColor = themeProvider->GetNSColor(ThemeProperties::COLOR_TOOLBAR_STROKE); + + // If the current theme is the system theme, and the system is in "increase + // contrast" mode, and this is an incognito window, force the toolbar stroke + // to be drawn in white instead of black, to make it show up better. + if ([[self window] hasDarkTheme] && themeProvider->ShouldIncreaseContrast()) + strokeColor = [NSColor whiteColor]; } if (themeProvider->ShouldIncreaseContrast())
diff --git a/chrome/browser/ui/cocoa/tabs/tab_view.mm b/chrome/browser/ui/cocoa/tabs/tab_view.mm index bb9175a..047226a4 100644 --- a/chrome/browser/ui/cocoa/tabs/tab_view.mm +++ b/chrome/browser/ui/cocoa/tabs/tab_view.mm
@@ -86,6 +86,10 @@ + (void)setTabEdgeStrokeColor; @end +@interface TabHeavyInvertedImageMaker : TabImageMaker ++ (void)setTabEdgeStrokeColor; +@end + @interface TabController(Private) // The TabView's close button. - (HoverCloseButton*)closeButton; @@ -98,8 +102,20 @@ enum StrokeType { STROKE_NORMAL, STROKE_HEAVY, + STROKE_HEAVY_INVERTED, }; +Class drawingClassForStrokeType(StrokeType stroke_type) { + switch (stroke_type) { + case STROKE_NORMAL: + return [TabImageMaker class]; + case STROKE_HEAVY: + return [TabHeavyImageMaker class]; + case STROKE_HEAVY_INVERTED: + return [TabHeavyInvertedImageMaker class]; + } +} + NSImage* imageForResourceID(int resource_id, StrokeType stroke_type) { CGFloat imageWidth = resource_id == IDR_TAB_ACTIVE_CENTER ? 1 : 18; SEL theSelector = 0; @@ -126,8 +142,7 @@ } DCHECK(theSelector); - Class makerClass = stroke_type == STROKE_HEAVY ? [TabHeavyImageMaker class] - : [TabImageMaker class]; + Class makerClass = drawingClassForStrokeType(stroke_type); base::scoped_nsobject<NSCustomImageRep> imageRep([[NSCustomImageRep alloc] initWithDrawSelector:theSelector delegate:makerClass]); @@ -160,8 +175,20 @@ (imageForResourceID(IDR_TAB_ACTIVE_LEFT, STROKE_HEAVY), imageForResourceID(IDR_TAB_ACTIVE_CENTER, STROKE_HEAVY), imageForResourceID(IDR_TAB_ACTIVE_RIGHT, STROKE_HEAVY))); + CR_DEFINE_STATIC_LOCAL( + ui::ThreePartImage, heavyInvertedStroke, + (imageForResourceID(IDR_TAB_ACTIVE_LEFT, STROKE_HEAVY_INVERTED), + imageForResourceID(IDR_TAB_ACTIVE_CENTER, STROKE_HEAVY_INVERTED), + imageForResourceID(IDR_TAB_ACTIVE_RIGHT, STROKE_HEAVY_INVERTED))); - return stroke_type == STROKE_HEAVY ? heavyStroke : stroke; + switch (stroke_type) { + case STROKE_NORMAL: + return stroke; + case STROKE_HEAVY: + return heavyStroke; + case STROKE_HEAVY_INVERTED: + return heavyInvertedStroke; + } } CGFloat LineWidthFromContext(CGContextRef context) { @@ -527,10 +554,12 @@ clipRect.origin.y += [self cr_lineWidth]; NSRectClip(clipRect); const ui::ThemeProvider* provider = [[self window] themeProvider]; - GetStrokeImage(state_ == NSOnState, - provider && provider->ShouldIncreaseContrast() - ? STROKE_HEAVY - : STROKE_NORMAL) + StrokeType stroke_type = STROKE_NORMAL; + if (provider && provider->ShouldIncreaseContrast()) { + stroke_type = + [[self window] hasDarkTheme] ? STROKE_HEAVY_INVERTED : STROKE_HEAVY; + } + GetStrokeImage(state_ == NSOnState, stroke_type) .DrawInRect(bounds, NSCompositeSourceOver, alpha); } @@ -1059,3 +1088,17 @@ } @end + +@implementation TabHeavyInvertedImageMaker + +// For "Increase Contrast" mode, when using a dark theme, the stroke should be +// drawn in flat white instead of flat black. There is normally no need to +// special-case this since the lower-contrast border is equally visible in light +// or dark themes. ++ (void)setTabEdgeStrokeColor { + static NSColor* heavyStrokeColor = + [skia::SkColorToSRGBNSColor(SK_ColorWHITE) retain]; + [heavyStrokeColor set]; +} + +@end
diff --git a/chrome/browser/ui/desktop_ios_promotion/sms_service.cc b/chrome/browser/ui/desktop_ios_promotion/sms_service.cc index 0a79da9..aa37c15e 100644 --- a/chrome/browser/ui/desktop_ios_promotion/sms_service.cc +++ b/chrome/browser/ui/desktop_ios_promotion/sms_service.cc
@@ -17,6 +17,7 @@ #include "net/base/url_util.h" #include "net/http/http_status_code.h" #include "net/http/http_util.h" +#include "net/traffic_annotation/network_traffic_annotation.h" #include "net/url_request/url_fetcher.h" #include "net/url_request/url_fetcher_delegate.h" #include "net/url_request/url_request_context_getter.h" @@ -149,8 +150,37 @@ const std::string& access_token) { net::URLFetcher::RequestType request_type = post_data_ ? net::URLFetcher::POST : net::URLFetcher::GET; + net::NetworkTrafficAnnotationTag traffic_annotation = + net::DefineNetworkTrafficAnnotation("desktop_ios_promotion", R"( + semantics { + sender: "Desktop iOS Promotion" + description: + "Performes either of the following two tasks: Queries a logged in " + "user's recovery phone number, or sends a predetermined " + "promotional SMS to that number. SMS text may change but it always " + "contains a link to download Chrome from iTunes." + trigger: + "The query without SMS is only triggered when the desktop to iOS " + "promotion is shown to the user. The query and send is triggered " + "when the user clicks on 'Send SMS' button in the desktop to iOS " + "promotion." + data: + "It sends an oauth token (X-Developer-Key) which lets the Google " + "API identify the user." + destination: GOOGLE_OWNED_SERVICE + } + policy { + cookies_allowed: false + setting: + "The feature cannot be disabled by settings, but it can be " + "disabled by 'Desktop to iOS Promotions' feature flag in " + "about:flags." + policy_exception_justification: + "Not implemented, considered not useful as it does not upload any " + "data and just downloads a recovery number." + })"); std::unique_ptr<net::URLFetcher> fetcher = - net::URLFetcher::Create(url_, request_type, this); + net::URLFetcher::Create(url_, request_type, this, traffic_annotation); fetcher->SetRequestContext(request_context_.get()); fetcher->SetMaxRetriesOn5xx(kMaxRetries); fetcher->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
diff --git a/chrome/browser/ui/task_manager/OWNERS b/chrome/browser/ui/task_manager/OWNERS index e3e4f11..d472cb41 100644 --- a/chrome/browser/ui/task_manager/OWNERS +++ b/chrome/browser/ui/task_manager/OWNERS
@@ -1,2 +1,4 @@ afakhry@chromium.org -nick@chromium.org \ No newline at end of file +nick@chromium.org + +# COMPONENT: UI>TaskManager
diff --git a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc index afff0949..647ac32 100644 --- a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc +++ b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.cc
@@ -28,8 +28,8 @@ #include "components/autofill/core/browser/validation.h" #include "components/autofill/core/common/autofill_clock.h" #include "components/autofill/core/common/autofill_constants.h" -#include "components/payments/content/payment_request.h" #include "components/payments/content/payment_request_spec.h" +#include "components/payments/content/payment_request_state.h" #include "components/strings/grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" #include "ui/native_theme/native_theme.h" @@ -80,9 +80,10 @@ } // namespace CreditCardEditorViewController::CreditCardEditorViewController( - PaymentRequest* request, + PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog) - : EditorViewController(request, dialog) {} + : EditorViewController(spec, state, dialog) {} CreditCardEditorViewController::~CreditCardEditorViewController() {} @@ -124,7 +125,7 @@ constexpr gfx::Size kCardIconSize = gfx::Size(30, 18); for (const std::string& supported_network : - request()->spec()->supported_card_networks()) { + spec()->supported_card_networks()) { const std::string autofill_card_type = autofill::data_util::GetCardTypeForBasicCardPaymentType( supported_network); @@ -190,7 +191,7 @@ return false; // Add the card (will not add a duplicate). - request()->state()->GetPersonalDataManager()->AddCreditCard(credit_card); + state()->GetPersonalDataManager()->AddCreditCard(credit_card); return true; } @@ -204,7 +205,7 @@ CreditCardEditorViewController::CreditCardValidationDelegate>( field, this, field.type == autofill::CREDIT_CARD_NUMBER - ? request()->spec()->supported_card_networks() + ? spec()->supported_card_networks() : std::vector<std::string>()); }
diff --git a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.h b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.h index 4b3a1ce..28106644 100644 --- a/chrome/browser/ui/views/payments/credit_card_editor_view_controller.h +++ b/chrome/browser/ui/views/payments/credit_card_editor_view_controller.h
@@ -17,14 +17,16 @@ namespace payments { -class PaymentRequest; +class PaymentRequestSpec; +class PaymentRequestState; class PaymentRequestDialogView; // Credit card editor screen of the Payment Request flow. class CreditCardEditorViewController : public EditorViewController { public: // Does not take ownership of the arguments, which should outlive this object. - CreditCardEditorViewController(PaymentRequest* request, + CreditCardEditorViewController(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog); ~CreditCardEditorViewController() override;
diff --git a/chrome/browser/ui/views/payments/credit_card_editor_view_controller_unittest.cc b/chrome/browser/ui/views/payments/credit_card_editor_view_controller_unittest.cc index 62fa153..9f72e4f 100644 --- a/chrome/browser/ui/views/payments/credit_card_editor_view_controller_unittest.cc +++ b/chrome/browser/ui/views/payments/credit_card_editor_view_controller_unittest.cc
@@ -28,7 +28,7 @@ test_clock.SetNow(kJanuary2017); std::unique_ptr<CreditCardEditorViewController> view_controller( - new CreditCardEditorViewController(nullptr, nullptr)); + new CreditCardEditorViewController(nullptr, nullptr, nullptr)); std::unique_ptr<ui::ComboboxModel> model = view_controller->GetComboboxModelForType(autofill::CREDIT_CARD_EXP_MONTH); @@ -57,7 +57,7 @@ test_clock.SetNow(kJune2017); std::unique_ptr<CreditCardEditorViewController> view_controller( - new CreditCardEditorViewController(nullptr, nullptr)); + new CreditCardEditorViewController(nullptr, nullptr, nullptr)); std::unique_ptr<ui::ComboboxModel> model = view_controller->GetComboboxModelForType(autofill::CREDIT_CARD_EXP_MONTH); @@ -85,7 +85,7 @@ test_clock.SetNow(kJune2017); std::unique_ptr<CreditCardEditorViewController> view_controller( - new CreditCardEditorViewController(nullptr, nullptr)); + new CreditCardEditorViewController(nullptr, nullptr, nullptr)); std::unique_ptr<ui::ComboboxModel> model = view_controller->GetComboboxModelForType(
diff --git a/chrome/browser/ui/views/payments/editor_view_controller.cc b/chrome/browser/ui/views/payments/editor_view_controller.cc index d8423a628..c87e63d 100644 --- a/chrome/browser/ui/views/payments/editor_view_controller.cc +++ b/chrome/browser/ui/views/payments/editor_view_controller.cc
@@ -16,7 +16,6 @@ #include "chrome/browser/ui/views/payments/validating_combobox.h" #include "chrome/browser/ui/views/payments/validating_textfield.h" #include "chrome/grit/generated_resources.h" -#include "components/payments/content/payment_request.h" #include "components/strings/grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" #include "ui/native_theme/native_theme.h" @@ -47,9 +46,10 @@ } // namespace -EditorViewController::EditorViewController(PaymentRequest* request, +EditorViewController::EditorViewController(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog) - : PaymentRequestSheetController(request, dialog) {} + : PaymentRequestSheetController(spec, state, dialog) {} EditorViewController::~EditorViewController() {}
diff --git a/chrome/browser/ui/views/payments/editor_view_controller.h b/chrome/browser/ui/views/payments/editor_view_controller.h index afc14a33..9cabb67 100644 --- a/chrome/browser/ui/views/payments/editor_view_controller.h +++ b/chrome/browser/ui/views/payments/editor_view_controller.h
@@ -36,7 +36,8 @@ namespace payments { -class PaymentRequest; +class PaymentRequestSpec; +class PaymentRequestState; class PaymentRequestDialogView; class ValidatingCombobox; class ValidatingTextfield; @@ -89,7 +90,8 @@ std::map<const EditorField, views::Label*, EditorField::Compare>; // Does not take ownership of the arguments, which should outlive this object. - EditorViewController(PaymentRequest* request, + EditorViewController(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog); ~EditorViewController() override;
diff --git a/chrome/browser/ui/views/payments/order_summary_view_controller.cc b/chrome/browser/ui/views/payments/order_summary_view_controller.cc index d8b1a9c..d168c9d 100644 --- a/chrome/browser/ui/views/payments/order_summary_view_controller.cc +++ b/chrome/browser/ui/views/payments/order_summary_view_controller.cc
@@ -17,7 +17,6 @@ #include "chrome/browser/ui/views/payments/payment_request_views_util.h" #include "chrome/grit/generated_resources.h" #include "components/payments/content/payment_request_spec.h" -#include "components/payments/content/payment_request_state.h" #include "components/payments/core/currency_formatter.h" #include "components/strings/grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" @@ -85,14 +84,15 @@ } // namespace OrderSummaryViewController::OrderSummaryViewController( - PaymentRequest* request, + PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog) - : PaymentRequestSheetController(request, dialog), pay_button_(nullptr) { - request->state()->AddObserver(this); + : PaymentRequestSheetController(spec, state, dialog), pay_button_(nullptr) { + state->AddObserver(this); } OrderSummaryViewController::~OrderSummaryViewController() { - request()->state()->RemoveObserver(this); + state()->RemoveObserver(this); } std::unique_ptr<views::View> OrderSummaryViewController::CreateView() { @@ -110,31 +110,28 @@ DialogViewID::ORDER_SUMMARY_LINE_ITEM_1, DialogViewID::ORDER_SUMMARY_LINE_ITEM_2, DialogViewID::ORDER_SUMMARY_LINE_ITEM_3}; - for (size_t i = 0; i < request()->spec()->details().display_items.size(); - i++) { + for (size_t i = 0; i < spec()->details().display_items.size(); i++) { DialogViewID view_id = i < line_items.size() ? line_items[i] : DialogViewID::VIEW_ID_NONE; content_view->AddChildView( CreateLineItemView( - base::UTF8ToUTF16( - request()->spec()->details().display_items[i]->label), - request()->spec()->GetFormattedCurrencyAmount( - request()->spec()->details().display_items[i]->amount->value), + base::UTF8ToUTF16(spec()->details().display_items[i]->label), + spec()->GetFormattedCurrencyAmount( + spec()->details().display_items[i]->amount->value), false, view_id) .release()); } base::string16 total_label_value = l10n_util::GetStringFUTF16( IDS_PAYMENT_REQUEST_ORDER_SUMMARY_SHEET_TOTAL_FORMAT, - base::UTF8ToUTF16(request()->spec()->details().total->amount->currency), - request()->spec()->GetFormattedCurrencyAmount( - request()->spec()->details().total->amount->value)); + base::UTF8ToUTF16(spec()->details().total->amount->currency), + spec()->GetFormattedCurrencyAmount( + spec()->details().total->amount->value)); content_view->AddChildView( - CreateLineItemView( - base::UTF8ToUTF16(request()->spec()->details().total->label), - total_label_value, true, - DialogViewID::ORDER_SUMMARY_TOTAL_AMOUNT_LABEL) + CreateLineItemView(base::UTF8ToUTF16(spec()->details().total->label), + total_label_value, true, + DialogViewID::ORDER_SUMMARY_TOTAL_AMOUNT_LABEL) .release()); return CreatePaymentView( @@ -153,12 +150,12 @@ button->set_tag(static_cast<int>(PaymentRequestCommonTags::PAY_BUTTON_TAG)); button->set_id(static_cast<int>(DialogViewID::PAY_BUTTON)); pay_button_ = button.get(); - UpdatePayButtonState(request()->state()->is_ready_to_pay()); + UpdatePayButtonState(state()->is_ready_to_pay()); return button; } void OrderSummaryViewController::OnSelectedInformationChanged() { - UpdatePayButtonState(request()->state()->is_ready_to_pay()); + UpdatePayButtonState(state()->is_ready_to_pay()); } void OrderSummaryViewController::UpdatePayButtonState(bool enabled) {
diff --git a/chrome/browser/ui/views/payments/order_summary_view_controller.h b/chrome/browser/ui/views/payments/order_summary_view_controller.h index 59081241..7ca9cc1 100644 --- a/chrome/browser/ui/views/payments/order_summary_view_controller.h +++ b/chrome/browser/ui/views/payments/order_summary_view_controller.h
@@ -7,12 +7,12 @@ #include "base/macros.h" #include "chrome/browser/ui/views/payments/payment_request_sheet_controller.h" -#include "components/payments/content/payment_request.h" #include "components/payments/content/payment_request_state.h" namespace payments { -class PaymentRequest; +class PaymentRequestSpec; +class PaymentRequestState; class PaymentRequestDialogView; // The PaymentRequestSheetController subtype for the Order Summary screen of the @@ -21,7 +21,8 @@ public PaymentRequestState::Observer { public: // Does not take ownership of the arguments, which should outlive this object. - OrderSummaryViewController(PaymentRequest* request, + OrderSummaryViewController(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog); ~OrderSummaryViewController() override;
diff --git a/chrome/browser/ui/views/payments/payment_method_view_controller.cc b/chrome/browser/ui/views/payments/payment_method_view_controller.cc index e208a9c..1cf6cc90 100644 --- a/chrome/browser/ui/views/payments/payment_method_view_controller.cc +++ b/chrome/browser/ui/views/payments/payment_method_view_controller.cc
@@ -16,7 +16,6 @@ #include "chrome/grit/generated_resources.h" #include "components/autofill/core/browser/autofill_type.h" #include "components/autofill/core/browser/credit_card.h" -#include "components/payments/content/payment_request.h" #include "components/payments/content/payment_request_state.h" #include "components/strings/grit/components_strings.h" #include "third_party/skia/include/core/SkColor.h" @@ -47,10 +46,11 @@ // outlive this object. |list| is the PaymentRequestItemList object that will // own this. PaymentMethodListItem(autofill::CreditCard* card, - PaymentRequest* request, + PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestItemList* list, bool selected) - : payments::PaymentRequestItemList::Item(request, list, selected), + : payments::PaymentRequestItemList::Item(spec, state, list, selected), card_(card) {} ~PaymentMethodListItem() override {} @@ -126,7 +126,7 @@ if (checkmark_) checkmark_->SetVisible(selected()); - request()->state()->SetSelectedCreditCard(card_); + state()->SetSelectedCreditCard(card_); } // views::ButtonListener: @@ -154,17 +154,18 @@ } // namespace PaymentMethodViewController::PaymentMethodViewController( - PaymentRequest* request, + PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog) - : PaymentRequestSheetController(request, dialog) { + : PaymentRequestSheetController(spec, state, dialog) { const std::vector<autofill::CreditCard*>& available_cards = - request->state()->credit_cards(); + state->credit_cards(); for (autofill::CreditCard* card : available_cards) { std::unique_ptr<PaymentMethodListItem> item = base::MakeUnique<PaymentMethodListItem>( - card, request, &payment_method_list_, - card == request->state()->selected_credit_card()); + card, spec, state, &payment_method_list_, + card == state->selected_credit_card()); payment_method_list_.AddItem(std::move(item)); } }
diff --git a/chrome/browser/ui/views/payments/payment_method_view_controller.h b/chrome/browser/ui/views/payments/payment_method_view_controller.h index b9f101bd..d5c14221 100644 --- a/chrome/browser/ui/views/payments/payment_method_view_controller.h +++ b/chrome/browser/ui/views/payments/payment_method_view_controller.h
@@ -11,7 +11,8 @@ namespace payments { -class PaymentRequest; +class PaymentRequestSpec; +class PaymentRequestState; class PaymentRequestDialogView; // The PaymentRequestSheetController subtype for the Payment Method screen of @@ -19,7 +20,8 @@ class PaymentMethodViewController : public PaymentRequestSheetController { public: // Does not take ownership of the arguments, which should outlive this object. - PaymentMethodViewController(PaymentRequest* request, + PaymentMethodViewController(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog); ~PaymentMethodViewController() override;
diff --git a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc index 7242a75..ff354aa 100644 --- a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc +++ b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc
@@ -94,6 +94,10 @@ return ui::DIALOG_BUTTON_NONE; } +void PaymentRequestDialogView::Pay() { + request_->Pay(); +} + void PaymentRequestDialogView::GoBack() { view_stack_.Pop(); @@ -104,8 +108,8 @@ void PaymentRequestDialogView::ShowContactProfileSheet() { view_stack_.Push( CreateViewAndInstallController( - ProfileListViewController::GetContactProfileViewController(request_, - this), + ProfileListViewController::GetContactProfileViewController( + request_->spec(), request_->state(), this), &controller_map_), /* animate */ true); if (observer_for_testing_) @@ -113,21 +117,21 @@ } void PaymentRequestDialogView::ShowOrderSummary() { - view_stack_.Push( - CreateViewAndInstallController( - base::MakeUnique<OrderSummaryViewController>(request_, this), - &controller_map_), - /* animate = */ true); + view_stack_.Push(CreateViewAndInstallController( + base::MakeUnique<OrderSummaryViewController>( + request_->spec(), request_->state(), this), + &controller_map_), + /* animate = */ true); if (observer_for_testing_) observer_for_testing_->OnOrderSummaryOpened(); } void PaymentRequestDialogView::ShowPaymentMethodSheet() { - view_stack_.Push( - CreateViewAndInstallController( - base::MakeUnique<PaymentMethodViewController>(request_, this), - &controller_map_), - /* animate = */ true); + view_stack_.Push(CreateViewAndInstallController( + base::MakeUnique<PaymentMethodViewController>( + request_->spec(), request_->state(), this), + &controller_map_), + /* animate = */ true); if (observer_for_testing_) observer_for_testing_->OnPaymentMethodOpened(); } @@ -135,26 +139,26 @@ void PaymentRequestDialogView::ShowShippingProfileSheet() { view_stack_.Push( CreateViewAndInstallController( - ProfileListViewController::GetShippingProfileViewController(request_, - this), + ProfileListViewController::GetShippingProfileViewController( + request_->spec(), request_->state(), this), &controller_map_), /* animate = */ true); } void PaymentRequestDialogView::ShowShippingOptionSheet() { - view_stack_.Push( - CreateViewAndInstallController( - base::MakeUnique<ShippingOptionViewController>(request_, this), - &controller_map_), - /* animate = */ true); + view_stack_.Push(CreateViewAndInstallController( + base::MakeUnique<ShippingOptionViewController>( + request_->spec(), request_->state(), this), + &controller_map_), + /* animate = */ true); } void PaymentRequestDialogView::ShowCreditCardEditor() { - view_stack_.Push( - CreateViewAndInstallController( - base::MakeUnique<CreditCardEditorViewController>(request_, this), - &controller_map_), - /* animate = */ true); + view_stack_.Push(CreateViewAndInstallController( + base::MakeUnique<CreditCardEditorViewController>( + request_->spec(), request_->state(), this), + &controller_map_), + /* animate = */ true); if (observer_for_testing_) observer_for_testing_->OnCreditCardEditorOpened(); } @@ -170,11 +174,11 @@ } void PaymentRequestDialogView::ShowInitialPaymentSheet() { - view_stack_.Push( - CreateViewAndInstallController( - base::MakeUnique<PaymentSheetViewController>(request_, this), - &controller_map_), - /* animate = */ false); + view_stack_.Push(CreateViewAndInstallController( + base::MakeUnique<PaymentSheetViewController>( + request_->spec(), request_->state(), this), + &controller_map_), + /* animate = */ false); if (observer_for_testing_) observer_for_testing_->OnDialogOpened(); }
diff --git a/chrome/browser/ui/views/payments/payment_request_dialog_view.h b/chrome/browser/ui/views/payments/payment_request_dialog_view.h index 7968c47..318b31b 100644 --- a/chrome/browser/ui/views/payments/payment_request_dialog_view.h +++ b/chrome/browser/ui/views/payments/payment_request_dialog_view.h
@@ -64,6 +64,7 @@ void ShowDialog() override; void CloseDialog() override; + void Pay(); void GoBack(); void ShowContactProfileSheet(); void ShowOrderSummary();
diff --git a/chrome/browser/ui/views/payments/payment_request_item_list.cc b/chrome/browser/ui/views/payments/payment_request_item_list.cc index 31c0e80..be27657 100644 --- a/chrome/browser/ui/views/payments/payment_request_item_list.cc +++ b/chrome/browser/ui/views/payments/payment_request_item_list.cc
@@ -20,10 +20,11 @@ } // namespace -PaymentRequestItemList::Item::Item(PaymentRequest* request, +PaymentRequestItemList::Item::Item(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestItemList* list, bool selected) - : request_(request), list_(list), selected_(selected) {} + : spec_(spec), state_(state), list_(list), selected_(selected) {} PaymentRequestItemList::Item::~Item() {}
diff --git a/chrome/browser/ui/views/payments/payment_request_item_list.h b/chrome/browser/ui/views/payments/payment_request_item_list.h index 0ac1c87..7a2ecc3f 100644 --- a/chrome/browser/ui/views/payments/payment_request_item_list.h +++ b/chrome/browser/ui/views/payments/payment_request_item_list.h
@@ -18,7 +18,8 @@ namespace payments { -class PaymentRequest; +class PaymentRequestSpec; +class PaymentRequestState; // A control representing a list of selectable items in the PaymentRequest // dialog. These lists enforce that only one of their elements be selectable at @@ -32,7 +33,10 @@ public: // Creates an item that will be owned by |list| with the initial state set // to |selected|. - Item(PaymentRequest* request, PaymentRequestItemList* list, bool selected); + Item(PaymentRequestSpec* spec, + PaymentRequestState* state, + PaymentRequestItemList* list, + bool selected); ~Item() override; // Gets the view associated with this item. It's owned by this object so @@ -48,9 +52,10 @@ // Returns a pointer to the PaymentRequestItemList that owns this object. PaymentRequestItemList* list() { return list_; } - // Returns a pointer to the PaymentRequest object associated with this - // instance of the UI. - PaymentRequest* request() { return request_; } + // Returns a pointer to the PaymentRequestSpec/State objects associated with + // this instance of the UI. + PaymentRequestSpec* spec() { return spec_; } + PaymentRequestState* state() { return state_; } protected: // Creates and returns the view associated with this list item. @@ -72,7 +77,8 @@ } std::unique_ptr<views::View> item_view_; - PaymentRequest* request_; + PaymentRequestSpec* spec_; + PaymentRequestState* state_; PaymentRequestItemList* list_; bool selected_;
diff --git a/chrome/browser/ui/views/payments/payment_request_item_list_unittest.cc b/chrome/browser/ui/views/payments/payment_request_item_list_unittest.cc index 8f1f86d..9c945b0 100644 --- a/chrome/browser/ui/views/payments/payment_request_item_list_unittest.cc +++ b/chrome/browser/ui/views/payments/payment_request_item_list_unittest.cc
@@ -4,7 +4,9 @@ #include "chrome/browser/ui/views/payments/payment_request_item_list.h" -#include <algorithm> +#include <memory> +#include <utility> +#include <vector> #include "base/memory/ptr_util.h" #include "testing/gtest/include/gtest/gtest.h" @@ -17,7 +19,7 @@ class TestListItem : public PaymentRequestItemList::Item { public: TestListItem(PaymentRequestItemList* list, bool selected) - : PaymentRequestItemList::Item(nullptr, list, selected), + : PaymentRequestItemList::Item(nullptr, nullptr, list, selected), selected_state_changed_calls_count_(0) {} int selected_state_changed_calls_count() {
diff --git a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc index 0fc3bb6..88ff8bc 100644 --- a/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc +++ b/chrome/browser/ui/views/payments/payment_request_sheet_controller.cc
@@ -18,9 +18,10 @@ namespace payments { PaymentRequestSheetController::PaymentRequestSheetController( - PaymentRequest* request, PaymentRequestDialogView* dialog) - : request_(request), dialog_(dialog) { -} + PaymentRequestSpec* spec, + PaymentRequestState* state, + PaymentRequestDialogView* dialog) + : spec_(spec), state_(state), dialog_(dialog) {} std::unique_ptr<views::Button> PaymentRequestSheetController::CreatePrimaryButton() { @@ -42,7 +43,7 @@ dialog()->GoBack(); break; case PaymentRequestCommonTags::PAY_BUTTON_TAG: - request()->Pay(); + dialog()->Pay(); break; case PaymentRequestCommonTags::PAYMENT_REQUEST_COMMON_TAG_MAX: NOTREACHED();
diff --git a/chrome/browser/ui/views/payments/payment_request_sheet_controller.h b/chrome/browser/ui/views/payments/payment_request_sheet_controller.h index d722992..1024d2b 100644 --- a/chrome/browser/ui/views/payments/payment_request_sheet_controller.h +++ b/chrome/browser/ui/views/payments/payment_request_sheet_controller.h
@@ -18,7 +18,8 @@ namespace payments { class PaymentRequestDialogView; -class PaymentRequest; +class PaymentRequestSpec; +class PaymentRequestState; // The base class for objects responsible for the creation and event handling in // views shown in the PaymentRequestDialog. @@ -26,17 +27,17 @@ public: // Objects of this class are owned by |dialog|, so it's a non-owned pointer // that should be valid throughout this object's lifetime. - // |request| is also not owned by this and is guaranteed to outlive dialog. - // Neither |request| or |dialog| should be null. - PaymentRequestSheetController(PaymentRequest* request, + // |state| and |spec| are also not owned by this and are guaranteed to outlive + // dialog. Neither |state|, |spec| or |dialog| should be null. + PaymentRequestSheetController(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog); ~PaymentRequestSheetController() override {} virtual std::unique_ptr<views::View> CreateView() = 0; - // The PaymentRequest object associated with this instance of the dialog. - // Caller should not take ownership of the result. - PaymentRequest* request() { return request_; } + PaymentRequestSpec* spec() { return spec_; } + PaymentRequestState* state() { return state_; } // The dialog that contains and owns this object. // Caller should not take ownership of the result. @@ -91,9 +92,9 @@ std::unique_ptr<views::View> CreateFooterView(); private: - // Not owned. Will outlive this. - PaymentRequest* request_; - // Not owned. Will outlive this. + // All these are not owned. Will outlive this. + PaymentRequestSpec* spec_; + PaymentRequestState* state_; PaymentRequestDialogView* dialog_; DISALLOW_COPY_AND_ASSIGN(PaymentRequestSheetController);
diff --git a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc index 031f804a..fbb6a8d 100644 --- a/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc +++ b/chrome/browser/ui/views/payments/payment_sheet_view_controller.cc
@@ -190,16 +190,17 @@ } // namespace PaymentSheetViewController::PaymentSheetViewController( - PaymentRequest* request, + PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog) - : PaymentRequestSheetController(request, dialog), + : PaymentRequestSheetController(spec, state, dialog), pay_button_(nullptr), widest_name_column_view_width_(ComputeWidestNameColumnViewWidth()) { - request->state()->AddObserver(this); + state->AddObserver(this); } PaymentSheetViewController::~PaymentSheetViewController() { - request()->state()->RemoveObserver(this); + state()->RemoveObserver(this); } std::unique_ptr<views::View> PaymentSheetViewController::CreateView() { @@ -215,7 +216,7 @@ layout->StartRow(0, 0); layout->AddView(CreatePaymentSheetSummaryRow().release()); - if (request()->spec()->request_shipping()) { + if (spec()->request_shipping()) { layout->StartRow(0, 0); layout->AddView(CreateShippingRow().release()); layout->StartRow(0, 0); @@ -223,9 +224,8 @@ } layout->StartRow(0, 0); layout->AddView(CreatePaymentMethodRow().release()); - if (request()->spec()->request_payer_name() || - request()->spec()->request_payer_email() || - request()->spec()->request_payer_phone()) { + if (spec()->request_payer_name() || spec()->request_payer_email() || + spec()->request_payer_phone()) { layout->StartRow(0, 0); layout->AddView(CreateContactInfoRow().release()); } @@ -239,7 +239,7 @@ } void PaymentSheetViewController::OnSelectedInformationChanged() { - UpdatePayButtonState(request()->state()->is_ready_to_pay()); + UpdatePayButtonState(state()->is_ready_to_pay()); } std::unique_ptr<views::Button> @@ -250,7 +250,7 @@ button->set_tag(static_cast<int>(PaymentRequestCommonTags::PAY_BUTTON_TAG)); button->set_id(static_cast<int>(DialogViewID::PAY_BUTTON)); pay_button_ = button.get(); - UpdatePayButtonState(request()->state()->is_ready_to_pay()); + UpdatePayButtonState(state()->is_ready_to_pay()); return button; } @@ -340,7 +340,7 @@ /* trailing =*/true); const std::vector<mojom::PaymentItemPtr>& items = - request()->spec()->details().display_items; + spec()->details().display_items; // The inline items section contains the first 2 display items of the // request's details, followed by a label indicating "N more items..." if // there are more than 2 items in the details. The total label and amount @@ -352,9 +352,8 @@ new views::Label(base::ASCIIToUTF16(items[i]->label))); item_amounts_layout->StartRow(0, 0); - item_amounts_layout->AddView( - new views::Label(request()->spec()->GetFormattedCurrencyAmount( - items[i]->amount->value))); + item_amounts_layout->AddView(new views::Label( + spec()->GetFormattedCurrencyAmount(items[i]->amount->value))); } int hidden_item_count = items.size() - kMaxNumberOfItemsShown; @@ -374,18 +373,16 @@ item_summaries_layout->StartRow(0, 0); item_summaries_layout->AddView( - CreateBoldLabel( - base::ASCIIToUTF16(request()->spec()->details().total->label)) + CreateBoldLabel(base::ASCIIToUTF16(spec()->details().total->label)) .release()); item_amounts_layout->StartRow(0, 0); item_amounts_layout->AddView( - CreateBoldLabel( - l10n_util::GetStringFUTF16( - IDS_PAYMENT_REQUEST_ORDER_SUMMARY_SHEET_TOTAL_FORMAT, - base::UTF8ToUTF16(request()->spec()->GetFormattedCurrencyCode()), - request()->spec()->GetFormattedCurrencyAmount( - request()->spec()->details().total->amount->value))) + CreateBoldLabel(l10n_util::GetStringFUTF16( + IDS_PAYMENT_REQUEST_ORDER_SUMMARY_SHEET_TOTAL_FORMAT, + base::UTF8ToUTF16(spec()->GetFormattedCurrencyCode()), + spec()->GetFormattedCurrencyAmount( + spec()->details().total->amount->value))) .release()); item_summaries->SetLayoutManager(item_summaries_layout.release()); @@ -405,11 +402,11 @@ std::unique_ptr<views::View> PaymentSheetViewController::CreateShippingSectionContent() { - auto* profile = request()->state()->selected_shipping_profile(); + auto* profile = state()->selected_shipping_profile(); return profile ? payments::GetShippingAddressLabel( AddressStyleType::SUMMARY, - request()->state()->GetApplicationLocale(), *profile) + state()->GetApplicationLocale(), *profile) : base::MakeUnique<views::Label>(base::string16()); } @@ -422,9 +419,7 @@ // +----------------------------------------------+ std::unique_ptr<views::Button> PaymentSheetViewController::CreateShippingRow() { std::unique_ptr<views::Button> section = CreatePaymentSheetRow( - this, - GetShippingAddressSectionString( - request()->spec()->options().shipping_type), + this, GetShippingAddressSectionString(spec()->options().shipping_type), CreateShippingSectionContent(), std::unique_ptr<views::View>(nullptr), widest_name_column_view_width_); section->set_tag( @@ -443,8 +438,7 @@ // +----------------------------------------------+ std::unique_ptr<views::Button> PaymentSheetViewController::CreatePaymentMethodRow() { - autofill::CreditCard* selected_card = - request()->state()->selected_credit_card(); + autofill::CreditCard* selected_card = state()->selected_credit_card(); std::unique_ptr<views::View> content_view; std::unique_ptr<views::ImageView> card_icon_view; @@ -485,15 +479,13 @@ std::unique_ptr<views::View> PaymentSheetViewController::CreateContactInfoSectionContent() { - autofill::AutofillProfile* profile = - request()->state()->selected_contact_profile(); - return profile ? payments::GetContactInfoLabel( - AddressStyleType::SUMMARY, - request()->state()->GetApplicationLocale(), *profile, - request()->spec()->request_payer_name(), - request()->spec()->request_payer_phone(), - request()->spec()->request_payer_email()) - : base::MakeUnique<views::Label>(base::string16()); + autofill::AutofillProfile* profile = state()->selected_contact_profile(); + return profile + ? payments::GetContactInfoLabel( + AddressStyleType::SUMMARY, state()->GetApplicationLocale(), + *profile, spec()->request_payer_name(), + spec()->request_payer_phone(), spec()->request_payer_email()) + : base::MakeUnique<views::Label>(base::string16()); } // Creates the Contact Info row, which contains a "Contact info" label; the @@ -520,16 +512,13 @@ std::unique_ptr<views::Button> PaymentSheetViewController::CreateShippingOptionRow() { payments::mojom::PaymentShippingOption* selected_option = - request()->state()->selected_shipping_option(); + state()->selected_shipping_option(); std::unique_ptr<views::View> option_label = CreateShippingOptionLabel( - selected_option, selected_option - ? request()->spec()->GetFormattedCurrencyAmount( - selected_option->amount->value) - : base::ASCIIToUTF16("")); + selected_option, selected_option ? spec()->GetFormattedCurrencyAmount( + selected_option->amount->value) + : base::ASCIIToUTF16("")); std::unique_ptr<views::Button> section = CreatePaymentSheetRow( - this, - GetShippingOptionSectionString( - request()->spec()->options().shipping_type), + this, GetShippingOptionSectionString(spec()->options().shipping_type), std::move(option_label), std::unique_ptr<views::View>(nullptr), widest_name_column_view_width_); section->set_tag(static_cast<int>(
diff --git a/chrome/browser/ui/views/payments/payment_sheet_view_controller.h b/chrome/browser/ui/views/payments/payment_sheet_view_controller.h index ca1d41ec..2458082 100644 --- a/chrome/browser/ui/views/payments/payment_sheet_view_controller.h +++ b/chrome/browser/ui/views/payments/payment_sheet_view_controller.h
@@ -9,12 +9,12 @@ #include "base/macros.h" #include "chrome/browser/ui/views/payments/payment_request_sheet_controller.h" -#include "components/payments/content/payment_request.h" #include "components/payments/content/payment_request_state.h" namespace payments { -class PaymentRequest; +class PaymentRequestSpec; +class PaymentRequestState; class PaymentRequestDialogView; // The PaymentRequestSheetController subtype for the Payment Sheet screen of the @@ -23,7 +23,8 @@ public PaymentRequestState::Observer { public: // Does not take ownership of the arguments, which should outlive this object. - PaymentSheetViewController(PaymentRequest* request, + PaymentSheetViewController(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog); ~PaymentSheetViewController() override;
diff --git a/chrome/browser/ui/views/payments/profile_list_view_controller.cc b/chrome/browser/ui/views/payments/profile_list_view_controller.cc index ba95e87..65cf3308 100644 --- a/chrome/browser/ui/views/payments/profile_list_view_controller.cc +++ b/chrome/browser/ui/views/payments/profile_list_view_controller.cc
@@ -6,7 +6,8 @@ #include "chrome/browser/ui/views/payments/payment_request_row_view.h" #include "chrome/browser/ui/views/payments/payment_request_views_util.h" -#include "components/payments/content/payment_request.h" +#include "components/payments/content/payment_request_spec.h" +#include "components/payments/content/payment_request_state.h" #include "components/strings/grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" #include "ui/views/controls/image_view.h" @@ -19,16 +20,21 @@ class ProfileItem : public PaymentRequestItemList::Item { public: // Constructs an object owned by |parent_list|, representing one element in - // the list. |request| is the PaymentRequest object that is represented by the - // current instance of the dialog. |parent_view| points to the controller - // which owns |parent_list|. |profile| is the AutofillProfile that this - // specific list item represents. It's a cached profile owned by |request|. + // the list. |spec| and |state| are the PaymentRequestSpec/State objects that + // are represented by the current instance of the dialog. |parent_view| points + // to the controller which owns |parent_list|. |profile| is the + // AutofillProfile that this specific list item represents. It's a cached + // profile owned by |state|. ProfileItem(autofill::AutofillProfile* profile, - PaymentRequest* request, + PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestItemList* parent_list, ProfileListViewController* parent_view, bool selected) - : payments::PaymentRequestItemList::Item(request, parent_list, selected), + : payments::PaymentRequestItemList::Item(spec, + state, + parent_list, + selected), parent_view_(parent_view), profile_(profile) {} ~ProfileItem() override {} @@ -84,9 +90,10 @@ // screen of the Payment Request flow. class ShippingProfileViewController : public ProfileListViewController { public: - ShippingProfileViewController(PaymentRequest* request, + ShippingProfileViewController(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog) - : ProfileListViewController(request, dialog) {} + : ProfileListViewController(spec, state, dialog) {} ~ShippingProfileViewController() override {} protected: @@ -94,17 +101,15 @@ std::unique_ptr<views::View> GetLabel( autofill::AutofillProfile* profile) override { return GetShippingAddressLabel(AddressStyleType::DETAILED, - request()->state()->GetApplicationLocale(), - *profile); + state()->GetApplicationLocale(), *profile); } std::vector<autofill::AutofillProfile*> GetProfiles() override { - return request()->state()->shipping_profiles(); + return state()->shipping_profiles(); } base::string16 GetHeaderString() override { - return GetShippingAddressSectionString( - request()->spec()->options().shipping_type); + return GetShippingAddressSectionString(spec()->options().shipping_type); } private: @@ -113,9 +118,10 @@ class ContactProfileViewController : public ProfileListViewController { public: - ContactProfileViewController(PaymentRequest* request, + ContactProfileViewController(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog) - : ProfileListViewController(request, dialog) {} + : ProfileListViewController(spec, state, dialog) {} ~ContactProfileViewController() override {} protected: @@ -123,14 +129,13 @@ std::unique_ptr<views::View> GetLabel( autofill::AutofillProfile* profile) override { return GetContactInfoLabel( - AddressStyleType::DETAILED, request()->state()->GetApplicationLocale(), - *profile, request()->spec()->request_payer_name(), - request()->spec()->request_payer_phone(), - request()->spec()->request_payer_email()); + AddressStyleType::DETAILED, state()->GetApplicationLocale(), *profile, + spec()->request_payer_name(), spec()->request_payer_phone(), + spec()->request_payer_email()); } std::vector<autofill::AutofillProfile*> GetProfiles() override { - return request()->state()->contact_profiles(); + return state()->contact_profiles(); } base::string16 GetHeaderString() override { @@ -147,35 +152,38 @@ // static std::unique_ptr<ProfileListViewController> ProfileListViewController::GetShippingProfileViewController( - PaymentRequest* request, + PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog) { - return base::MakeUnique<ShippingProfileViewController>(request, dialog); + return base::MakeUnique<ShippingProfileViewController>(spec, state, dialog); } // static std::unique_ptr<ProfileListViewController> ProfileListViewController::GetContactProfileViewController( - PaymentRequest* request, + PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog) { - return base::MakeUnique<ContactProfileViewController>(request, dialog); + return base::MakeUnique<ContactProfileViewController>(spec, state, dialog); } ProfileListViewController::ProfileListViewController( - PaymentRequest* request, + PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog) - : PaymentRequestSheetController(request, dialog) {} + : PaymentRequestSheetController(spec, state, dialog) {} ProfileListViewController::~ProfileListViewController() {} std::unique_ptr<views::View> ProfileListViewController::CreateView() { autofill::AutofillProfile* selected_profile = - request()->state()->selected_shipping_profile(); + state()->selected_shipping_profile(); // This must be done at Create-time, rather than construct-time, because // the subclass method GetProfiles can't be called in the ctor. for (auto* profile : GetProfiles()) { list_.AddItem(base::MakeUnique<ProfileItem>( - profile, request(), &list_, this, profile == selected_profile)); + profile, spec(), state(), &list_, this, profile == selected_profile)); } return CreatePaymentView(
diff --git a/chrome/browser/ui/views/payments/profile_list_view_controller.h b/chrome/browser/ui/views/payments/profile_list_view_controller.h index a02ebb3..d76db713 100644 --- a/chrome/browser/ui/views/payments/profile_list_view_controller.h +++ b/chrome/browser/ui/views/payments/profile_list_view_controller.h
@@ -23,7 +23,8 @@ namespace payments { -class PaymentRequest; +class PaymentRequestSpec; +class PaymentRequestState; class PaymentRequestDialogView; // This base class encapsulates common view logic for contexts which display @@ -35,13 +36,15 @@ // Creates a controller which lists and allows selection of profiles // for shipping address. static std::unique_ptr<ProfileListViewController> - GetShippingProfileViewController(PaymentRequest* request, + GetShippingProfileViewController(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog); // Creates a controller which lists and allows selection of profiles // for contact info. static std::unique_ptr<ProfileListViewController> - GetContactProfileViewController(PaymentRequest* request, + GetContactProfileViewController(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog); // PaymentRequestSheetController: @@ -54,7 +57,8 @@ protected: // Does not take ownership of the arguments, which should outlive this object. - ProfileListViewController(PaymentRequest* request, + ProfileListViewController(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog); // Returns the profiles cached by |request| which are appropriate for display
diff --git a/chrome/browser/ui/views/payments/shipping_option_view_controller.cc b/chrome/browser/ui/views/payments/shipping_option_view_controller.cc index 78c2b16..053e069 100644 --- a/chrome/browser/ui/views/payments/shipping_option_view_controller.cc +++ b/chrome/browser/ui/views/payments/shipping_option_view_controller.cc
@@ -5,8 +5,8 @@ #include "chrome/browser/ui/views/payments/shipping_option_view_controller.h" #include "chrome/browser/ui/views/payments/payment_request_views_util.h" -#include "components/payments/content/payment_request.h" #include "components/payments/content/payment_request_spec.h" +#include "components/payments/content/payment_request_state.h" namespace payments { @@ -15,10 +15,11 @@ class ShippingOptionItem : public PaymentRequestItemList::Item { public: ShippingOptionItem(payments::mojom::PaymentShippingOption* shipping_option, - PaymentRequest* request, + PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestItemList* parent_list, bool selected) - : PaymentRequestItemList::Item(request, parent_list, selected), + : PaymentRequestItemList::Item(spec, state, parent_list, selected), shipping_option_(shipping_option) {} ~ShippingOptionItem() override {} @@ -26,8 +27,8 @@ // payments::PaymentRequestItemList::Item: std::unique_ptr<views::View> CreateItemView() override { return CreateShippingOptionLabel( - shipping_option_, request()->spec()->GetFormattedCurrencyAmount( - shipping_option_->amount->value)); + shipping_option_, + spec()->GetFormattedCurrencyAmount(shipping_option_->amount->value)); } void SelectedStateChanged() override {} @@ -40,13 +41,14 @@ } // namespace ShippingOptionViewController::ShippingOptionViewController( - PaymentRequest* request, + PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog) - : PaymentRequestSheetController(request, dialog) { - for (const auto& option : request->spec()->details().shipping_options) { + : PaymentRequestSheetController(spec, state, dialog) { + for (const auto& option : spec->details().shipping_options) { shipping_option_list_.AddItem(base::MakeUnique<ShippingOptionItem>( - option.get(), request, &shipping_option_list_, - option.get() == request->state()->selected_shipping_option())); + option.get(), spec, state, &shipping_option_list_, + option.get() == state->selected_shipping_option())); } } @@ -56,10 +58,9 @@ std::unique_ptr<views::View> list_view = shipping_option_list_.CreateListView(); return CreatePaymentView( - CreateSheetHeaderView(true, - GetShippingOptionSectionString( - request()->spec()->options().shipping_type), - this), + CreateSheetHeaderView( + true, GetShippingOptionSectionString(spec()->options().shipping_type), + this), std::move(list_view)); }
diff --git a/chrome/browser/ui/views/payments/shipping_option_view_controller.h b/chrome/browser/ui/views/payments/shipping_option_view_controller.h index e3f7827..7f0822f 100644 --- a/chrome/browser/ui/views/payments/shipping_option_view_controller.h +++ b/chrome/browser/ui/views/payments/shipping_option_view_controller.h
@@ -11,9 +11,13 @@ namespace payments { +class PaymentRequestSpec; +class PaymentRequestState; + class ShippingOptionViewController : public PaymentRequestSheetController { public: - ShippingOptionViewController(PaymentRequest* request, + ShippingOptionViewController(PaymentRequestSpec* spec, + PaymentRequestState* state, PaymentRequestDialogView* dialog); ~ShippingOptionViewController() override;
diff --git a/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc index ad8cafa..3e659775 100644 --- a/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
@@ -1430,33 +1430,34 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, Profile* profile) { LocalizedString localized_strings[] = { - {"privacyPageTitle", IDS_SETTINGS_PRIVACY}, - {"linkDoctorPref", IDS_SETTINGS_LINKDOCTOR_PREF}, - {"searchSuggestPref", IDS_SETTINGS_SUGGEST_PREF}, - {"networkPredictionEnabled", - IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_DESCRIPTION}, - {"safeBrowsingEnableProtection", - IDS_SETTINGS_SAFEBROWSING_ENABLEPROTECTION}, - {"spellingPref", IDS_SETTINGS_SPELLING_PREF}, - {"spellingDescription", IDS_SETTINGS_SPELLING_DESCRIPTION}, + {"privacyPageTitle", IDS_SETTINGS_PRIVACY}, + {"linkDoctorPref", IDS_SETTINGS_LINKDOCTOR_PREF}, + {"searchSuggestPref", IDS_SETTINGS_SUGGEST_PREF}, + {"networkPredictionEnabled", + IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_DESCRIPTION}, + {"safeBrowsingEnableProtection", + IDS_SETTINGS_SAFEBROWSING_ENABLEPROTECTION}, + {"spellingPref", IDS_SETTINGS_SPELLING_PREF}, + {"spellingDescription", IDS_SETTINGS_SPELLING_DESCRIPTION}, #if defined(OS_CHROMEOS) - {"enableLogging", IDS_SETTINGS_ENABLE_LOGGING_DIAGNOSTIC_AND_USAGE_DATA}, + {"enableLogging", IDS_SETTINGS_ENABLE_LOGGING_DIAGNOSTIC_AND_USAGE_DATA}, #else - {"enableLogging", IDS_SETTINGS_ENABLE_LOGGING}, + {"enableLogging", IDS_SETTINGS_ENABLE_LOGGING}, #endif - {"doNotTrack", IDS_SETTINGS_ENABLE_DO_NOT_TRACK}, - {"enableContentProtectionAttestation", - IDS_SETTINGS_ENABLE_CONTENT_PROTECTION_ATTESTATION}, - {"wakeOnWifi", IDS_SETTINGS_WAKE_ON_WIFI_DESCRIPTION}, - {"manageCertificates", IDS_SETTINGS_MANAGE_CERTIFICATES}, - {"manageCertificatesDescription", - IDS_SETTINGS_MANAGE_CERTIFICATES_DESCRIPTION}, - {"contentSettings", IDS_SETTINGS_CONTENT_SETTINGS}, - {"siteSettings", IDS_SETTINGS_SITE_SETTINGS}, - {"siteSettingsDescription", IDS_SETTINGS_SITE_SETTINGS_DESCRIPTION}, - {"clearBrowsingData", IDS_SETTINGS_CLEAR_DATA}, - {"clearBrowsingDataDescription", IDS_SETTINGS_CLEAR_DATA_DESCRIPTION}, - {"titleAndCount", IDS_SETTINGS_TITLE_AND_COUNT}, + {"doNotTrack", IDS_SETTINGS_ENABLE_DO_NOT_TRACK}, + {"doNotTrackDialogTitle", IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_TITLE}, + {"enableContentProtectionAttestation", + IDS_SETTINGS_ENABLE_CONTENT_PROTECTION_ATTESTATION}, + {"wakeOnWifi", IDS_SETTINGS_WAKE_ON_WIFI_DESCRIPTION}, + {"manageCertificates", IDS_SETTINGS_MANAGE_CERTIFICATES}, + {"manageCertificatesDescription", + IDS_SETTINGS_MANAGE_CERTIFICATES_DESCRIPTION}, + {"contentSettings", IDS_SETTINGS_CONTENT_SETTINGS}, + {"siteSettings", IDS_SETTINGS_SITE_SETTINGS}, + {"siteSettingsDescription", IDS_SETTINGS_SITE_SETTINGS_DESCRIPTION}, + {"clearBrowsingData", IDS_SETTINGS_CLEAR_DATA}, + {"clearBrowsingDataDescription", IDS_SETTINGS_CLEAR_DATA_DESCRIPTION}, + {"titleAndCount", IDS_SETTINGS_TITLE_AND_COUNT}, }; AddLocalizedStringsBulk(html_source, localized_strings, arraysize(localized_strings)); @@ -1472,6 +1473,11 @@ IDS_SETTINGS_IMPROVE_BROWSING_EXPERIENCE, base::ASCIIToUTF16(chrome::kPrivacyLearnMoreURL))); html_source->AddString( + "doNotTrackDialogMessage", + l10n_util::GetStringFUTF16( + IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_TEXT, + base::ASCIIToUTF16(chrome::kDoNotTrackLearnMoreURL))); + html_source->AddString( "exceptionsLearnMoreURL", base::ASCIIToUTF16(chrome::kContentSettingsExceptionsLearnMoreURL)); }
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index d2612b5..8f42c09 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -4386,6 +4386,7 @@ "../browser/media/cast_remoting_connector_unittest.cc", "../browser/media/router/browser_presentation_connection_proxy_unittest.cc", "../browser/media/router/create_presentation_connection_request_unittest.cc", + "../browser/media/router/discovery/media_sink_internal_unittest.cc", "../browser/media/router/issue_manager_unittest.cc", "../browser/media/router/issue_unittest.cc", "../browser/media/router/media_route_unittest.cc", @@ -4411,6 +4412,7 @@ "../browser/media/router/media_router_ui_service_factory_unittest.cc", "../browser/media/router/mojo/media_router_mojo_impl_unittest.cc", "../browser/media/router/mojo/media_router_mojo_metrics_unittest.cc", + "../browser/media/router/mojo/media_router_struct_traits_unittest.cc", "../browser/ui/toolbar/media_router_action_controller_unittest.cc", "../browser/ui/toolbar/media_router_action_unittest.cc", "../browser/ui/toolbar/media_router_contextual_menu_unittest.cc",
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeInstrumentationTestRunner.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeInstrumentationTestRunner.java index 6ac1505..fd50cb6 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeInstrumentationTestRunner.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeInstrumentationTestRunner.java
@@ -114,9 +114,8 @@ } private boolean supportsWebVr() { - // WebVR support is tied to VR Services support, which is currently only on N+ - // TODO(bsheedy): Change this to >= N when the SDK supports it - return Build.VERSION.SDK_INT > Build.VERSION_CODES.M; + // WebVR support is tied to VR Services support, which is only on K+ + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; } @Override
diff --git a/chrome/test/data/extensions/web_request_site_process_registration/blocked.html b/chrome/test/data/extensions/web_request_site_process_registration/blocked.html new file mode 100644 index 0000000..f251fa3 --- /dev/null +++ b/chrome/test/data/extensions/web_request_site_process_registration/blocked.html
@@ -0,0 +1,9 @@ +<!-- + * Copyright 2017 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. +--> +<html> +<head></head> +<body>Mostly empty page, which will be blocked from loading.</body> +</html>
diff --git a/chrome/test/data/extensions/web_request_site_process_registration/manifest.json b/chrome/test/data/extensions/web_request_site_process_registration/manifest.json new file mode 100644 index 0000000..7df7d42 --- /dev/null +++ b/chrome/test/data/extensions/web_request_site_process_registration/manifest.json
@@ -0,0 +1,8 @@ +{ + "name": "webRequest Blocking", + "version": "1.0", + "manifest_version": 2, + "description": "Tests navigation to a page blocked by webRequest API.", + "permissions": ["webRequest", "webRequestBlocking", "<all_urls>"], + "web_accessible_resources": [ "blocked.html" ] +}
diff --git a/chrome/test/data/extensions/web_request_site_process_registration/test.html b/chrome/test/data/extensions/web_request_site_process_registration/test.html new file mode 100644 index 0000000..89b5fc26 --- /dev/null +++ b/chrome/test/data/extensions/web_request_site_process_registration/test.html
@@ -0,0 +1,6 @@ +<!-- + * Copyright 2017 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. +--> +<script src="test.js"></script>
diff --git a/chrome/test/data/extensions/web_request_site_process_registration/test.js b/chrome/test/data/extensions/web_request_site_process_registration/test.js new file mode 100644 index 0000000..a7f5d61 --- /dev/null +++ b/chrome/test/data/extensions/web_request_site_process_registration/test.js
@@ -0,0 +1,13 @@ +// Copyright 2017 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. + +chrome.webRequest.onBeforeRequest.addListener( + function(details) { + if (details.url == chrome.extension.getURL("/blocked.html")) { + return {cancel: true}; + } + }, + {urls: ["<all_urls>"]}, + ["blocking"] +);
diff --git a/chrome/test/data/webui/settings/settings_toggle_button_tests.js b/chrome/test/data/webui/settings/settings_toggle_button_tests.js index 5c32539..7e00525 100644 --- a/chrome/test/data/webui/settings/settings_toggle_button_tests.js +++ b/chrome/test/data/webui/settings/settings_toggle_button_tests.js
@@ -110,7 +110,7 @@ value: 5 }; - testElement._setNumericUncheckedValue(5); + testElement.numericUncheckedValue = 5; testElement.set('pref', prefNum); assertFalse(testElement.checked); @@ -131,7 +131,7 @@ value: 3 }; - testElement._setNumericUncheckedValue(5); + testElement.numericUncheckedValue = 5; testElement.set('pref', prefNum);
diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp index a97ca8a..9e95f4a 100644 --- a/chromeos/chromeos.gyp +++ b/chromeos/chromeos.gyp
@@ -500,265 +500,4 @@ ], 'use_binder%': 0, }, - 'includes': [ - 'chromeos_tools.gypi' - ], - 'targets': [ - { - # GN version: //chromeos - 'target_name': 'chromeos', - 'type': '<(component)', - 'dependencies': [ - '../base/base.gyp:base', - '../base/base.gyp:base_i18n', - '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations', - '../build/linux/system.gyp:dbus', - '../build/linux/system.gyp:nss', - '../components/components.gyp:cloud_policy_proto', - '../components/components.gyp:device_event_log_component', - '../components/components.gyp:onc_component', - '../components/components.gyp:proxy_config', - '../components/components.gyp:user_manager', - '../components/components.gyp:signin_core_account_id', - '../components/prefs/prefs.gyp:prefs', - '../crypto/crypto.gyp:crypto', - '../dbus/dbus.gyp:dbus', - '../google_apis/google_apis.gyp:google_apis', - '../net/net.gyp:net', - '../third_party/icu/icu.gyp:icui18n', - '../third_party/protobuf/protobuf.gyp:protobuf_lite', - '../url/url.gyp:url_lib', - 'attestation_proto', - 'cryptohome_proto', - 'power_manager_proto', - ], - 'defines': [ - 'CHROMEOS_IMPLEMENTATION', - ], - 'sources': [ '<@(chromeos_sources)' ], - 'conditions': [ - ['target_arch == "arm" or target_arch == "ia32"', { - 'defines': [ - 'BINDER_IPC_32BIT', - ], - }], - ], - }, - { - # GN version: //chromeos:test_support - # This target contains mocks that can be used to write unit tests. - 'target_name': 'chromeos_test_support', - 'type': 'static_library', - 'dependencies': [ - '../build/linux/system.gyp:dbus', - '../google_apis/google_apis.gyp:google_apis_test_support', - '../testing/gmock.gyp:gmock', - 'chromeos', - 'chromeos_test_support_without_gmock', - 'cryptohome_proto', - 'power_manager_proto', - ], - # If you edit the file list of this target, please edit BUILD.gn as well. - 'sources': [ - 'attestation/mock_attestation_flow.cc', - 'attestation/mock_attestation_flow.h', - 'chromeos_test_utils.cc', - 'chromeos_test_utils.h', - 'cryptohome/mock_async_method_caller.cc', - 'cryptohome/mock_async_method_caller.h', - 'cryptohome/mock_homedir_methods.cc', - 'cryptohome/mock_homedir_methods.h', - 'dbus/mock_cryptohome_client.cc', - 'dbus/mock_cryptohome_client.h', - 'dbus/mock_lorgnette_manager_client.cc', - 'dbus/mock_lorgnette_manager_client.h', - 'dbus/mock_permission_broker_client.cc', - 'dbus/mock_permission_broker_client.h', - 'dbus/mock_session_manager_client.cc', - 'dbus/mock_session_manager_client.h', - 'dbus/mock_shill_manager_client.cc', - 'dbus/mock_shill_manager_client.h', - 'dbus/mock_shill_profile_client.cc', - 'dbus/mock_shill_profile_client.h', - 'dbus/mock_shill_service_client.cc', - 'dbus/mock_shill_service_client.h', - 'dbus/services/service_provider_test_helper.cc', - 'dbus/services/service_provider_test_helper.h', - 'disks/mock_disk_mount_manager.cc', - 'disks/mock_disk_mount_manager.h', - 'login/auth/fake_extended_authenticator.cc', - 'login/auth/fake_extended_authenticator.h', - 'login/auth/mock_auth_attempt_state_resolver.cc', - 'login/auth/mock_auth_attempt_state_resolver.h', - 'login/auth/mock_auth_status_consumer.cc', - 'login/auth/mock_auth_status_consumer.h', - 'login/auth/mock_url_fetchers.cc', - 'login/auth/mock_url_fetchers.h', - 'network/fake_network_device_handler.cc', - 'network/fake_network_device_handler.h', - 'network/mock_managed_network_configuration_handler.cc', - 'network/mock_managed_network_configuration_handler.h', - 'network/mock_network_device_handler.cc', - 'network/mock_network_device_handler.h', - 'network/onc/onc_test_utils.cc', - 'network/onc/onc_test_utils.h', - ], - 'include_dirs': [ - '..', - ], - }, - { - # GN version: //chromeos:test_support_without_gmock - 'target_name': 'chromeos_test_support_without_gmock', - 'type': 'static_library', - 'export_dependent_settings': [ - 'power_manager_proto', - ], - 'dependencies': [ - '../build/linux/system.gyp:dbus', - '../crypto/crypto.gyp:crypto', - '../dbus/dbus.gyp:dbus', - 'chromeos', - 'cryptohome_proto', - 'power_manager_proto', - ], - # If you edit the file list of this target, please edit BUILD.gn as well. - 'sources': [ - 'dbus/fake_session_manager_client.cc', - 'dbus/fake_session_manager_client.h', - 'dbus/fake_shill_manager_client.cc', - 'dbus/fake_shill_manager_client.h', - 'dbus/fake_update_engine_client.cc', - 'dbus/fake_update_engine_client.h', - ], - 'include_dirs': [ - '..', - ], - }, - { - # GN version: //chromeos:chromeos_unittests - 'target_name': 'chromeos_unittests', - 'type': 'executable', - 'dependencies': [ - '../base/base.gyp:run_all_unittests', - '../base/base.gyp:test_support_base', - '../build/linux/system.gyp:dbus', - '../build/linux/system.gyp:nss', - '../components/components.gyp:onc_component', - '../components/components.gyp:proxy_config', - '../components/components.gyp:signin_core_account_id', - '../components/prefs/prefs.gyp:prefs_test_support', - '../crypto/crypto.gyp:crypto', - '../crypto/crypto.gyp:crypto_test_support', - '../dbus/dbus.gyp:dbus_test_support', - '../google_apis/google_apis.gyp:google_apis', - '../net/net.gyp:net', - '../net/net.gyp:net_test_support', - '../testing/gmock.gyp:gmock', - '../testing/gtest.gyp:gtest', - '../third_party/icu/icu.gyp:icuuc', - '../third_party/icu/icu.gyp:icui18n', - '../url/url.gyp:url_lib', - 'chromeos_test_support', - 'cryptohome_proto', - 'power_manager_proto', - ], - 'sources': [ '<@(chromeos_test_sources)' ], - 'include_dirs': [ - '..', - ], - 'conditions': [ - ['use_binder == 1', { - 'sources': [ '<@(chromeos_binder_test_sources)' ], - 'conditions': [ - ['target_arch == "arm" or target_arch == "ia32"', { - 'defines': [ - 'BINDER_IPC_32BIT', - ], - }], - ], - }], - ], - }, - { - # GN version: //chromeos:power_manager_proto - # Protobuf compiler/generator for power-manager related protocol buffers. - 'target_name': 'power_manager_proto', - 'type': 'static_library', - 'sources': [ - '../third_party/cros_system_api/dbus/power_manager/input_event.proto', - '../third_party/cros_system_api/dbus/power_manager/peripheral_battery_status.proto', - '../third_party/cros_system_api/dbus/power_manager/policy.proto', - '../third_party/cros_system_api/dbus/power_manager/power_supply_properties.proto', - '../third_party/cros_system_api/dbus/power_manager/suspend.proto', - ], - 'variables': { - 'proto_in_dir': '../third_party/cros_system_api/dbus/power_manager', - 'proto_out_dir': 'chromeos/dbus/power_manager', - }, - 'includes': ['../build/protoc.gypi'], - }, - { - # GN version: //chromeos:cryptohome_proto - # Protobuf compiler/generator for cryptohome related protocol buffers. - 'target_name': 'cryptohome_proto', - 'type': 'static_library', - 'sources': [ - '../third_party/cros_system_api/dbus/cryptohome/key.proto', - '../third_party/cros_system_api/dbus/cryptohome/rpc.proto', - ], - 'variables': { - 'proto_in_dir': '../third_party/cros_system_api/dbus/cryptohome', - 'proto_out_dir': 'chromeos/dbus/cryptohome', - }, - 'includes': ['../build/protoc.gypi'], - }, - { - # GN version: //chromeos:cryptohome_attestation - # Protobuf compiler/generator for attestation related protocol buffers. - 'target_name': 'attestation_proto', - 'type': 'static_library', - 'sources': [ - 'dbus/proto/attestation.proto', - ], - 'variables': { - 'proto_in_dir': 'dbus/proto', - 'proto_out_dir': 'chromeos/cryptohome', - }, - 'includes': ['../build/protoc.gypi'], - }, - { - # GN version: //chromeos:cryptohome_signkey_proto - # Protobuf compiler/generator for cryptohome key signing protocol buffer. - 'target_name': 'cryptohome_signkey_proto', - 'type': 'static_library', - 'sources': [ - '../third_party/cros_system_api/dbus/cryptohome/signed_secret.proto', - ], - 'variables': { - 'proto_in_dir': '../third_party/cros_system_api/dbus/cryptohome', - 'proto_out_dir': 'chromeos/cryptohome', - }, - 'includes': ['../build/protoc.gypi'], - }, - ], - 'conditions': [ - ['test_isolation_mode != "noop"', { - 'targets': [ - { - 'target_name': 'chromeos_unittests_run', - 'type': 'none', - 'dependencies': [ - 'chromeos_unittests', - ], - 'includes': [ - '../build/isolate.gypi', - ], - 'sources': [ - 'chromeos_unittests.isolate', - ], - }, - ], - }], - ], }
diff --git a/components/background_task_scheduler/README.md b/components/background_task_scheduler/README.md index c48720d5..c3d180f 100644 --- a/components/background_task_scheduler/README.md +++ b/components/background_task_scheduler/README.md
@@ -95,14 +95,14 @@ `BackgroundTaskScheduler` and use it to schedule the job. ```java -BackgroundTaskScheduleFactory.getScheduler().schedule(myTaskInfo); +BackgroundTaskSchedulerFactory.getScheduler().schedule(myTaskInfo); ``` If you ever need to cancel a task, you can do that by calling `cancel`, and passing in the task ID: ```java -BackgroundTaskScheduleFactory.getScheduler().cancel(TaskIds.YOUR_FEATURE); +BackgroundTaskSchedulerFactory.getScheduler().cancel(TaskIds.YOUR_FEATURE); ``` ## Passing task arguments
diff --git a/components/feedback/OWNERS b/components/feedback/OWNERS index e89629f3..2b9307b 100644 --- a/components/feedback/OWNERS +++ b/components/feedback/OWNERS
@@ -4,3 +4,5 @@ zork@chromium.org per-file anonymizer_tool*=battre@chromium.org + +# COMPONENT: Platform>Apps>Feedback
diff --git a/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/CrashFileManager.java b/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/CrashFileManager.java index ae3deaf6..a7ea15ad 100644 --- a/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/CrashFileManager.java +++ b/components/minidump_uploader/android/java/src/org/chromium/components/minidump_uploader/CrashFileManager.java
@@ -51,7 +51,8 @@ private static final Pattern MINIDUMP_PATTERN = Pattern.compile("\\.dmp([0-9]*)(\\.try([0-9]+))?\\z"); - private static final Pattern UPLOADED_MINIDUMP_PATTERN = Pattern.compile("\\.up([0-9]*)\\z"); + private static final Pattern UPLOADED_MINIDUMP_PATTERN = + Pattern.compile("\\.up([0-9]*)(\\.try([0-9]+))?\\z"); private static final String NOT_YET_UPLOADED_MINIDUMP_SUFFIX = ".dmp";
diff --git a/components/minidump_uploader/android/javatests/src/org/chromium/components/minidump_uploader/CrashFileManagerTest.java b/components/minidump_uploader/android/javatests/src/org/chromium/components/minidump_uploader/CrashFileManagerTest.java index 7df0402..7b109aa1d 100644 --- a/components/minidump_uploader/android/javatests/src/org/chromium/components/minidump_uploader/CrashFileManagerTest.java +++ b/components/minidump_uploader/android/javatests/src/org/chromium/components/minidump_uploader/CrashFileManagerTest.java
@@ -81,7 +81,7 @@ mDmpFile1.setLastModified(mModificationTimestamp); mModificationTimestamp += 1000; - mDmpFile2 = new File(mCrashDir, "chromium-renderer_abc.dmp" + TEST_PID); + mDmpFile2 = new File(mCrashDir, "chromium-renderer_abc.dmp" + TEST_PID + ".try1"); mDmpFile2.createNewFile(); mDmpFile2.setLastModified(mModificationTimestamp); mModificationTimestamp += 1000; @@ -115,7 +115,7 @@ mUpFile1.setLastModified(mModificationTimestamp); mModificationTimestamp += 1000; - mUpFile2 = new File(mCrashDir, "chromium-renderer_abcd.up" + TEST_PID); + mUpFile2 = new File(mCrashDir, "chromium-renderer_abcd.up" + TEST_PID + ".try0"); mUpFile2.createNewFile(); mUpFile2.setLastModified(mModificationTimestamp); mModificationTimestamp += 1000; @@ -322,17 +322,21 @@ CrashFileManager.markUploadSuccess(mDmpFile1); assertFalse(mDmpFile1.exists()); assertTrue(new File(mCrashDir, "123_abc.up0").exists()); + + CrashFileManager.markUploadSuccess(mDmpFile2); + assertFalse(mDmpFile2.exists()); + assertTrue(new File(mCrashDir, "chromium-renderer_abc.up" + TEST_PID + ".try1").exists()); } @SuppressFBWarnings("RV_RETURN_VALUE_IGNORED_BAD_PRACTICE") @SmallTest @Feature({"Android-AppBase"}) public void testMarkUploadSuccess_ForcedUpload() throws IOException { - File forced = new File(mCrashDir, "123_abc.forced0"); + File forced = new File(mCrashDir, "123_abc.forced" + TEST_PID + ".try0"); forced.createNewFile(); CrashFileManager.markUploadSuccess(forced); assertFalse(forced.exists()); - assertTrue(new File(mCrashDir, "123_abc.up0").exists()); + assertTrue(new File(mCrashDir, "123_abc.up" + TEST_PID + ".try0").exists()); } @SmallTest @@ -341,6 +345,11 @@ CrashFileManager.markUploadSkipped(mDmpFile1); assertFalse(mDmpFile1.exists()); assertTrue(new File(mCrashDir, "123_abc.skipped0").exists()); + + CrashFileManager.markUploadSkipped(mDmpFile2); + assertFalse(mDmpFile2.exists()); + assertTrue( + new File(mCrashDir, "chromium-renderer_abc.skipped" + TEST_PID + ".try1").exists()); } @SmallTest @@ -561,10 +570,10 @@ File[] recentFiles = new File[3 * CrashFileManager.MAX_CRASH_REPORTS_TO_KEEP]; for (int i = 0; i < CrashFileManager.MAX_CRASH_REPORTS_TO_KEEP; ++i) { String prefix = "chromium-renderer-minidump-deadbeef" + i; - // There is no reason why both a minidump and failed upload should exist at the same - // time, but the cleanup code should be robust to it anyway. + // There is no reason why both a minidump-sans-logcat and failed upload should exist at + // the same time, but the cleanup code should be robust to it anyway. File recentMinidump = new File(mCrashDir, prefix + ".dmp"); - File recentFailedUpload = new File(mCrashDir, prefix + ".up0.try0"); + File recentFailedUpload = new File(mCrashDir, prefix + ".dmp0.try1"); File recentLogcatFile = new File(mCrashDir, prefix + ".logcat"); recentMinidump.createNewFile(); recentFailedUpload.createNewFile(); @@ -582,8 +591,10 @@ // Create some additional successful uploads. File success1 = new File(mCrashDir, "chromium-renderer-minidump-cafebebe1.up0"); - File success2 = new File(mCrashDir, "chromium-renderer-minidump-cafebebe2.up1"); - File success3 = new File(mCrashDir, "chromium-renderer-minidump-cafebebe3.up2"); + File success2 = + new File(mCrashDir, "chromium-renderer-minidump-cafebebe2.up" + TEST_PID + ".try1"); + File success3 = + new File(mCrashDir, "chromium-renderer-minidump-cafebebe3.up" + TEST_PID + ".try2"); success1.createNewFile(); success2.createNewFile(); success3.createNewFile();
diff --git a/components/nacl/browser/pnacl_host.cc b/components/nacl/browser/pnacl_host.cc index fe9cb5d..cacb030 100644 --- a/components/nacl/browser/pnacl_host.cc +++ b/components/nacl/browser/pnacl_host.cc
@@ -13,7 +13,6 @@ #include "base/files/file_util.h" #include "base/logging.h" #include "base/numerics/safe_math.h" -#include "base/task_runner_util.h" #include "base/task_scheduler/post_task.h" #include "base/threading/sequenced_worker_pool.h" #include "components/nacl/browser/nacl_browser.h" @@ -382,15 +381,13 @@ pt->got_nexe_fd = false; FileProxy* proxy(new FileProxy(std::move(file), this)); - if (!base::PostTaskAndReplyWithResult( - BrowserThread::GetBlockingPool(), - FROM_HERE, - base::Bind(&FileProxy::Write, base::Unretained(proxy), - pt->nexe_read_buffer), - base::Bind(&FileProxy::WriteDone, base::Owned(proxy), - entry->first))) { - pt->callback.Run(base::File(), false); - } + base::PostTaskWithTraitsAndReplyWithResult( + FROM_HERE, + base::TaskTraits().MayBlock().WithPriority( + base::TaskPriority::BACKGROUND), + base::Bind(&FileProxy::Write, base::Unretained(proxy), + pt->nexe_read_buffer), + base::Bind(&FileProxy::WriteDone, base::Owned(proxy), entry->first)); } //////////////////// GetNexeFd miss path @@ -459,13 +456,13 @@ entry->second.nexe_fd = NULL; entry->second.got_nexe_fd = false; - if (!base::PostTaskAndReplyWithResult( - BrowserThread::GetBlockingPool(), FROM_HERE, - base::Bind(&PnaclHost::CopyFileToBuffer, Passed(&file)), - base::Bind(&PnaclHost::StoreTranslatedNexe, base::Unretained(this), - id))) { - store_nexe = false; - } + base::PostTaskWithTraitsAndReplyWithResult( + FROM_HERE, + base::TaskTraits().MayBlock().WithPriority( + base::TaskPriority::BACKGROUND), + base::Bind(&PnaclHost::CopyFileToBuffer, Passed(&file)), + base::Bind(&PnaclHost::StoreTranslatedNexe, base::Unretained(this), + id)); } if (!store_nexe) {
diff --git a/components/plugins/renderer/loadable_plugin_placeholder.cc b/components/plugins/renderer/loadable_plugin_placeholder.cc index 355dc7d..4f1303c 100644 --- a/components/plugins/renderer/loadable_plugin_placeholder.cc +++ b/components/plugins/renderer/loadable_plugin_placeholder.cc
@@ -340,8 +340,10 @@ content::V8ValueConverter::create()); base::Value value("placeholderReady"); blink::WebSerializedScriptValue message_data = - blink::WebSerializedScriptValue::serialize(converter->ToV8Value( - &value, element.document().frame()->mainWorldScriptContext())); + blink::WebSerializedScriptValue::serialize( + blink::mainThreadIsolate(), + converter->ToV8Value( + &value, element.document().frame()->mainWorldScriptContext())); blink::WebDOMMessageEvent msg_event(message_data); plugin()->container()->enqueueMessageEvent(msg_event);
diff --git a/content/browser/background_fetch/background_fetch_job_controller_unittest.cc b/content/browser/background_fetch/background_fetch_job_controller_unittest.cc index 18513b2..94848a3 100644 --- a/content/browser/background_fetch/background_fetch_job_controller_unittest.cc +++ b/content/browser/background_fetch/background_fetch_job_controller_unittest.cc
@@ -4,15 +4,20 @@ #include "content/browser/background_fetch/background_fetch_job_controller.h" +#include <string> +#include <vector> + #include "base/bind_helpers.h" #include "base/callback_helpers.h" +#include "base/guid.h" #include "base/memory/ptr_util.h" #include "base/run_loop.h" +#include "base/strings/string_number_conversions.h" #include "content/browser/background_fetch/background_fetch_data_manager.h" #include "content/browser/background_fetch/background_fetch_job_info.h" #include "content/browser/background_fetch/background_fetch_request_info.h" #include "content/public/browser/browser_thread.h" -#include "content/public/test/mock_download_item.h" +#include "content/public/test/fake_download_item.h" #include "content/public/test/mock_download_manager.h" #include "content/public/test/test_browser_context.h" #include "content/public/test/test_browser_thread_bundle.h" @@ -30,36 +35,42 @@ namespace content { -// Use the basic MockDownloadItem, but override it to provide a valid GUID. -class MockDownloadItemWithValues : public MockDownloadItem { - public: - const std::string& GetGuid() const override { return guid_; } - void SetGuid(const std::string& guid) { guid_ = guid; } - - private: - std::string guid_; -}; - // Use the basic MockDownloadManager, but override it so that it implements the // functionality that the JobController requires. class MockDownloadManagerWithCallback : public MockDownloadManager { public: void DownloadUrl(std::unique_ptr<DownloadUrlParameters> params) override { + base::RunLoop run_loop; DownloadUrlMock(params.get()); + std::string guid = base::GenerateGUID(); + std::unique_ptr<FakeDownloadItem> item = + base::MakeUnique<FakeDownloadItem>(); + item->SetState(DownloadItem::DownloadState::IN_PROGRESS); + item->SetGuid(guid); BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, - base::Bind(params->callback(), &download_item_, + base::Bind(params->callback(), item.get(), DOWNLOAD_INTERRUPT_REASON_NONE)); + download_items_.push_back(std::move(item)); + run_loop.RunUntilIdle(); } + // This is called during shutdown for each DownloadItem so can be an + // O(n^2) where n is controlled by the users of the API. If n is expected to + // be larger or the method is called in more places, consider alternatives. DownloadItem* GetDownloadByGuid(const std::string& guid) override { - DCHECK_EQ(download_item_.GetGuid(), guid); - return &download_item_; + for (const auto& item : download_items_) { + if (item->GetGuid() == guid) + return item.get(); + } + return nullptr; } - MockDownloadItemWithValues* download_item() { return &download_item_; } + const std::vector<std::unique_ptr<FakeDownloadItem>>& download_items() const { + return download_items_; + } private: - MockDownloadItemWithValues download_item_; + std::vector<std::unique_ptr<FakeDownloadItem>> download_items_; }; class BackgroundFetchJobControllerTest : public ::testing::Test { @@ -115,21 +126,18 @@ MockDownloadManagerWithCallback* download_manager_; }; -TEST_F(BackgroundFetchJobControllerTest, StartDownload) { +TEST_F(BackgroundFetchJobControllerTest, SingleRequestJob) { BackgroundFetchJobInfo job_info(kTag, url::Origin(GURL(kOrigin)), kServiceWorkerRegistrationId); BackgroundFetchRequestInfo request_info(GURL(kTestUrl), kJobGuid); std::vector<BackgroundFetchRequestInfo> request_infos{request_info}; - // Create a MockDownloadItem that the test can manipulate. - MockDownloadItemWithValues* item = download_manager()->download_item(); - item->SetGuid("foo"); - // Get a JobData to give to the JobController. The JobController then gets // the BackgroundFetchRequestInfos from the JobData. - std::unique_ptr<BackgroundFetchJobData> job_data = + std::unique_ptr<BackgroundFetchJobData> owned_job_data = base::MakeUnique<BackgroundFetchJobData>(request_infos); - InitializeJobController(std::move(job_data)); + BackgroundFetchJobData* job_data = owned_job_data.get(); + InitializeJobController(std::move(owned_job_data)); EXPECT_CALL(*(download_manager()), DownloadUrlMock(::testing::Pointee(::testing::Property( @@ -137,6 +145,72 @@ .Times(1); StartProcessing(); + + // Get one of the pending downloads from the download manager. + auto& download_items = download_manager()->download_items(); + ASSERT_EQ(1U, download_items.size()); + FakeDownloadItem* item = download_items[0].get(); + + // Update the observer with no actual change. + ItemObserver()->OnDownloadUpdated(item); + EXPECT_FALSE(job_data->IsComplete()); + + // Update the item to be completed then update the observer. The JobController + // should update the JobData that the request is complete. + item->SetState(DownloadItem::DownloadState::COMPLETE); + ItemObserver()->OnDownloadUpdated(item); + EXPECT_TRUE(job_data->IsComplete()); +} + +TEST_F(BackgroundFetchJobControllerTest, MultipleRequestJob) { + BackgroundFetchJobInfo job_info(kTag, url::Origin(GURL(kOrigin)), + kServiceWorkerRegistrationId); + std::vector<BackgroundFetchRequestInfo> request_infos; + for (int i = 0; i < 10; i++) { + request_infos.emplace_back(GURL(kTestUrl), base::IntToString(i)); + } + + // Get a JobData to give to the JobController. The JobController then gets + // the BackgroundFetchRequestInfos from the JobData. + std::unique_ptr<BackgroundFetchJobData> owned_job_data = + base::MakeUnique<BackgroundFetchJobData>(request_infos); + BackgroundFetchJobData* job_data = owned_job_data.get(); + InitializeJobController(std::move(owned_job_data)); + + EXPECT_CALL(*(download_manager()), + DownloadUrlMock(::testing::Pointee(::testing::Property( + &DownloadUrlParameters::url, GURL(kTestUrl))))) + .Times(10); + + StartProcessing(); + + // Get one of the pending downloads from the download manager. + auto& download_items = download_manager()->download_items(); + ASSERT_EQ(1U, download_items.size()); + FakeDownloadItem* item = download_items[0].get(); + + // Update the observer with no actual change. + ItemObserver()->OnDownloadUpdated(item); + EXPECT_FALSE(job_data->IsComplete()); + ASSERT_EQ(1U, download_items.size()); + + for (size_t i = 0; i < 9; i++) { + // Update the next item to be completed then update the observer. + ASSERT_EQ(i + 1, download_items.size()); + item = download_items[i].get(); + item->SetState(DownloadItem::DownloadState::COMPLETE); + ItemObserver()->OnDownloadUpdated(item); + EXPECT_FALSE(job_data->IsComplete()); + } + EXPECT_FALSE(job_data->HasRequestsRemaining()); + + // Finally, update the last request to be complete. The JobController should + // see that there are no more requests and mark the job as done. + ASSERT_EQ(10U, download_items.size()); + item = download_items[9].get(); + item->SetState(DownloadItem::DownloadState::COMPLETE); + ItemObserver()->OnDownloadUpdated(item); + EXPECT_TRUE(job_data->IsComplete()); } } // namespace content
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc index 44e9cec..722ee0d 100644 --- a/content/browser/frame_host/navigator_impl.cc +++ b/content/browser/frame_host/navigator_impl.cc
@@ -625,12 +625,12 @@ } // Update the site of the SiteInstance if it doesn't have one yet, unless - // assigning a site is not necessary for this URL. In that case, the - // SiteInstance can still be considered unused until a navigation to a real - // page. + // assigning a site is not necessary for this URL or the commit was for an + // error page. In that case, the SiteInstance can still be considered unused + // until a navigation to a real page. SiteInstanceImpl* site_instance = render_frame_host->GetSiteInstance(); - if (!site_instance->HasSite() && - ShouldAssignSiteForURL(params.url)) { + if (!site_instance->HasSite() && ShouldAssignSiteForURL(params.url) && + !params.url_is_unreachable) { site_instance->SetSite(params.url); }
diff --git a/content/browser/renderer_host/input/input_router_impl_unittest.cc b/content/browser/renderer_host/input/input_router_impl_unittest.cc index ce14e3e..f48267d 100644 --- a/content/browser/renderer_host/input/input_router_impl_unittest.cc +++ b/content/browser/renderer_host/input/input_router_impl_unittest.cc
@@ -232,12 +232,19 @@ } void SimulateGestureEvent(WebGestureEvent gesture) { - // Ensure non-zero touchscreen fling velocities, as the router will - // validate aganst such. - if (gesture.type() == WebInputEvent::GestureFlingStart && + if (gesture.type() == WebInputEvent::GestureScrollBegin && gesture.sourceDevice == blink::WebGestureDeviceTouchscreen && - !gesture.data.flingStart.velocityX && - !gesture.data.flingStart.velocityY) { + !gesture.data.scrollBegin.deltaXHint && + !gesture.data.scrollBegin.deltaYHint) { + // Ensure non-zero scroll-begin offset-hint to make the event sane, + // prevents unexpected filtering at TouchActionFilter. + gesture.data.scrollBegin.deltaYHint = 2.f; + } else if (gesture.type() == WebInputEvent::GestureFlingStart && + gesture.sourceDevice == blink::WebGestureDeviceTouchscreen && + !gesture.data.flingStart.velocityX && + !gesture.data.flingStart.velocityY) { + // Ensure non-zero touchscreen fling velocities, as the router will + // validate against such. gesture.data.flingStart.velocityX = 5.f; }
diff --git a/content/browser/renderer_host/input/touch_action_filter.cc b/content/browser/renderer_host/input/touch_action_filter.cc index d51412c..50a7b90 100644 --- a/content/browser/renderer_host/input/touch_action_filter.cc +++ b/content/browser/renderer_host/input/touch_action_filter.cc
@@ -180,48 +180,31 @@ return (allowed_touch_action_ & TOUCH_ACTION_PINCH_ZOOM) == 0; } - if ((allowed_touch_action_ & TOUCH_ACTION_PAN) == TOUCH_ACTION_PAN) - // All possible panning is enabled. + const float& deltaXHint = gesture_event.data.scrollBegin.deltaXHint; + const float& deltaYHint = gesture_event.data.scrollBegin.deltaYHint; + + if (deltaXHint == 0.0 && deltaYHint == 0.0) return false; - if (!(allowed_touch_action_ & TOUCH_ACTION_PAN)) - // No panning is enabled. - return true; + const float absDeltaXHint = fabs(deltaXHint); + const float absDeltaYHint = fabs(deltaYHint); - // If there's no hint or it's perfectly diagonal, then allow the scroll. - // Note, however, that the panning direction of the following GSU/GPB events - // is updated if needed to make them touch-action compliant. - // - // TODO(mustaq): With unidirectional touch-action, this can - // allow wrong panning with diagonal swipes. Investigate. crbug.com/697102 - if (fabs(gesture_event.data.scrollBegin.deltaXHint) == - fabs(gesture_event.data.scrollBegin.deltaYHint)) - return false; - - // Determine the primary initial axis of the scroll, and check whether - // panning along that axis is permitted. - if (fabs(gesture_event.data.scrollBegin.deltaXHint) > - fabs(gesture_event.data.scrollBegin.deltaYHint)) { - if (gesture_event.data.scrollBegin.deltaXHint > 0 && - allowed_touch_action_ & TOUCH_ACTION_PAN_LEFT) { - return false; - } else if (gesture_event.data.scrollBegin.deltaXHint < 0 && - allowed_touch_action_ & TOUCH_ACTION_PAN_RIGHT) { - return false; - } else { - return true; - } - } else { - if (gesture_event.data.scrollBegin.deltaYHint > 0 && - allowed_touch_action_ & TOUCH_ACTION_PAN_UP) { - return false; - } else if (gesture_event.data.scrollBegin.deltaYHint < 0 && - allowed_touch_action_ & TOUCH_ACTION_PAN_DOWN) { - return false; - } else { - return true; - } + TouchAction minimal_conforming_touch_action = TOUCH_ACTION_NONE; + if (absDeltaXHint >= absDeltaYHint) { + if (deltaXHint > 0) + minimal_conforming_touch_action |= TOUCH_ACTION_PAN_LEFT; + else if (deltaXHint < 0) + minimal_conforming_touch_action |= TOUCH_ACTION_PAN_RIGHT; } + if (absDeltaYHint >= absDeltaXHint) { + if (deltaYHint > 0) + minimal_conforming_touch_action |= TOUCH_ACTION_PAN_UP; + else if (deltaYHint < 0) + minimal_conforming_touch_action |= TOUCH_ACTION_PAN_DOWN; + } + DCHECK(minimal_conforming_touch_action != TOUCH_ACTION_NONE); + + return (allowed_touch_action_ & minimal_conforming_touch_action) == 0; } } // namespace content
diff --git a/content/browser/renderer_host/input/touch_action_filter_unittest.cc b/content/browser/renderer_host/input/touch_action_filter_unittest.cc index 0b4b4234..1e4dd5f 100644 --- a/content/browser/renderer_host/input/touch_action_filter_unittest.cc +++ b/content/browser/renderer_host/input/touch_action_filter_unittest.cc
@@ -55,7 +55,7 @@ } { - // Scrolls hinted mostly in the larger axis are permitted in that axis. + // Scrolls biased towards the touch-action axis are permitted. filter.ResetTouchAction(); filter.OnSetTouchAction(action); WebGestureEvent scroll_begin = @@ -89,7 +89,8 @@ } { - // Scrolls hinted mostly in the opposite direction are suppressed entirely. + // Scrolls biased towards the perpendicular of the touch-action axis are + // suppressed entirely. filter.ResetTouchAction(); filter.OnSetTouchAction(action); WebGestureEvent scroll_begin = @@ -108,6 +109,64 @@ } } +static void PanTestForUnidirectionalTouchAction(TouchAction action, + float scroll_x, + float scroll_y) { + TouchActionFilter filter; + WebGestureEvent scroll_end = SyntheticWebGestureEventBuilder::Build( + WebInputEvent::GestureScrollEnd, kSourceDevice); + + { + // Scrolls towards the touch-action direction are permitted. + filter.ResetTouchAction(); + filter.OnSetTouchAction(action); + WebGestureEvent scroll_begin = + SyntheticWebGestureEventBuilder::BuildScrollBegin(scroll_x, scroll_y, + kSourceDevice); + EXPECT_FALSE(filter.FilterGestureEvent(&scroll_begin)); + + WebGestureEvent scroll_update = + SyntheticWebGestureEventBuilder::BuildScrollUpdate(scroll_x, scroll_y, + 0, kSourceDevice); + EXPECT_FALSE(filter.FilterGestureEvent(&scroll_update)); + EXPECT_FALSE(filter.FilterGestureEvent(&scroll_end)); + } + + { + // Scrolls towards the exact opposite of the touch-action direction are + // suppressed entirely. + filter.ResetTouchAction(); + filter.OnSetTouchAction(action); + WebGestureEvent scroll_begin = + SyntheticWebGestureEventBuilder::BuildScrollBegin(-scroll_x, -scroll_y, + kSourceDevice); + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); + + WebGestureEvent scroll_update = + SyntheticWebGestureEventBuilder::BuildScrollUpdate(-scroll_x, -scroll_y, + 0, kSourceDevice); + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update)); + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end)); + } + + { + // Scrolls towards the diagonal opposite of the touch-action direction are + // suppressed entirely. + filter.ResetTouchAction(); + filter.OnSetTouchAction(action); + WebGestureEvent scroll_begin = + SyntheticWebGestureEventBuilder::BuildScrollBegin( + -scroll_x - scroll_y, -scroll_x - scroll_y, kSourceDevice); + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_begin)); + + WebGestureEvent scroll_update = + SyntheticWebGestureEventBuilder::BuildScrollUpdate( + -scroll_x - scroll_y, -scroll_x - scroll_y, 0, kSourceDevice); + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_update)); + EXPECT_TRUE(filter.FilterGestureEvent(&scroll_end)); + } +} + TEST(TouchActionFilterTest, SimpleFilter) { TouchActionFilter filter; @@ -226,6 +285,7 @@ PanTest(TOUCH_ACTION_PAN_LEFT, kScrollX, kScrollY, kDX, kDY, kFlingX, kFlingY, kDX, 0, kFlingX, 0); + PanTestForUnidirectionalTouchAction(TOUCH_ACTION_PAN_LEFT, kScrollX, 0); } TEST(TouchActionFilterTest, PanRight) { @@ -238,6 +298,7 @@ PanTest(TOUCH_ACTION_PAN_RIGHT, kScrollX, kScrollY, kDX, kDY, kFlingX, kFlingY, kDX, 0, kFlingX, 0); + PanTestForUnidirectionalTouchAction(TOUCH_ACTION_PAN_RIGHT, kScrollX, 0); } TEST(TouchActionFilterTest, PanX) { @@ -262,6 +323,7 @@ PanTest(TOUCH_ACTION_PAN_UP, kScrollX, kScrollY, kDX, kDY, kFlingX, kFlingY, 0, kDY, 0, kFlingY); + PanTestForUnidirectionalTouchAction(TOUCH_ACTION_PAN_UP, 0, kScrollY); } TEST(TouchActionFilterTest, PanDown) { @@ -274,6 +336,7 @@ PanTest(TOUCH_ACTION_PAN_DOWN, kScrollX, kScrollY, kDX, kDY, kFlingX, kFlingY, 0, kDY, 0, kFlingY); + PanTestForUnidirectionalTouchAction(TOUCH_ACTION_PAN_DOWN, 0, kScrollY); } TEST(TouchActionFilterTest, PanY) {
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc index 8d42ffe2..73c6345 100644 --- a/content/browser/renderer_host/media/media_stream_manager.cc +++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -626,8 +626,8 @@ for (const LabeledDeviceRequest& device_request : requests_) { for (const StreamDeviceInfo& info : device_request.second->devices) { - if (info.device.id == device_id) { - DCHECK_EQ(MEDIA_DEVICE_VIDEO_CAPTURE, info.device.type); + if (info.device.id == device_id && + info.device.type == MEDIA_DEVICE_VIDEO_CAPTURE) { return info.session_id; } }
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index ae2509f1..f0c2f40 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -332,7 +332,13 @@ SiteProcessMap() {} void RegisterProcess(const std::string& site, RenderProcessHost* process) { - map_[site] = process; + // There could already exist a site to process mapping due to races between + // two WebContents with blank SiteInstances. If that occurs, keeping the + // exising entry and not overwriting it is a predictable behavior that is + // safe. + SiteToProcessMap::iterator i = map_.find(site); + if (i == map_.end()) + map_[site] = process; } RenderProcessHost* FindProcess(const std::string& site) {
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc index 2dcae41..0ce174b 100644 --- a/content/browser/site_per_process_browsertest.cc +++ b/content/browser/site_per_process_browsertest.cc
@@ -4023,7 +4023,10 @@ "window.domAutomationController.send(" " frames['updated-name'] === undefined);", &success)); - EXPECT_TRUE(success); + // TODO(yukishiino): The following expectation should be TRUE, but we're + // intentionally disabling the name and origin check of the named access on + // window. See also crbug.com/538562 and crbug.com/701489. + EXPECT_FALSE(success); // Change iframe's name to match the content window's name so that it can // reference the child frame by its new name in case of cross origin. EXPECT_TRUE(
diff --git a/content/public/browser/bluetooth_chooser.h b/content/public/browser/bluetooth_chooser.h index c250943f..c7fa6e12 100644 --- a/content/public/browser/bluetooth_chooser.h +++ b/content/public/browser/bluetooth_chooser.h
@@ -83,10 +83,6 @@ bool is_gatt_connected, bool is_paired, int signal_strength_level) {} - - // Tells the chooser that a device is no longer available. The chooser should - // not call DeviceSelected() for a device that's been removed. - virtual void RemoveDevice(const std::string& device_id) {} }; } // namespace content
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn index eca7dc87..99a7745e1 100644 --- a/content/renderer/BUILD.gn +++ b/content/renderer/BUILD.gn
@@ -582,6 +582,8 @@ "media/media_stream_center.h", "media/media_stream_constraints_util.cc", "media/media_stream_constraints_util.h", + "media/media_stream_constraints_util_sets.cc", + "media/media_stream_constraints_util_sets.h", "media/media_stream_constraints_util_video_device.cc", "media/media_stream_constraints_util_video_device.h", "media/media_stream_dispatcher.cc",
diff --git a/content/renderer/media/media_stream_constraints_util_sets.cc b/content/renderer/media/media_stream_constraints_util_sets.cc new file mode 100644 index 0000000..545674b --- /dev/null +++ b/content/renderer/media/media_stream_constraints_util_sets.cc
@@ -0,0 +1,529 @@ +// Copyright 2017 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. + +#include "content/renderer/media/media_stream_constraints_util_sets.h" + +#include <cmath> + +#include "content/renderer/media/media_stream_constraints_util.h" +#include "content/renderer/media/media_stream_video_source.h" +#include "third_party/WebKit/public/platform/WebMediaConstraints.h" + +namespace content { + +using Point = ResolutionSet::Point; + +namespace { + +constexpr double kTolerance = 1e-5; + +constexpr int kDefaultHeight = MediaStreamVideoSource::kDefaultHeight; +constexpr int kDefaultWidth = MediaStreamVideoSource::kDefaultWidth; +constexpr double kDefaultAspectRatio = + MediaStreamVideoSource::kDefaultAspectRatio; + +// Not perfect, but good enough for this application. +bool AreApproximatelyEqual(double d1, double d2) { + if (std::fabs((d1 - d2)) <= kTolerance) + return true; + + return d1 == d2 || (std::fabs((d1 - d2) / d1) <= kTolerance && + std::fabs((d1 - d2) / d2) <= kTolerance); +} + +bool IsLess(double d1, double d2) { + return d1 < d2 && !AreApproximatelyEqual(d1, d2); +} + +bool IsLessOrEqual(double d1, double d2) { + return d1 < d2 || AreApproximatelyEqual(d1, d2); +} + +bool IsGreater(double d1, double d2) { + return d1 > d2 && !AreApproximatelyEqual(d1, d2); +} + +bool IsGreaterOrEqual(double d1, double d2) { + return d1 > d2 || AreApproximatelyEqual(d1, d2); +} + +int ToValidDimension(long dimension) { + if (dimension > ResolutionSet::kMaxDimension) + return ResolutionSet::kMaxDimension; + if (dimension < 0) + return 0; + + return static_cast<int>(dimension); +} + +int MinDimensionFromConstraint(const blink::LongConstraint& constraint) { + if (!ConstraintHasMin(constraint)) + return 0; + + return ToValidDimension(ConstraintMin(constraint)); +} + +int MaxDimensionFromConstraint(const blink::LongConstraint& constraint) { + if (!ConstraintHasMax(constraint)) + return ResolutionSet::kMaxDimension; + + return ToValidDimension(ConstraintMax(constraint)); +} + +double ToValidAspectRatio(double aspect_ratio) { + return aspect_ratio < 0.0 ? 0.0 : aspect_ratio; +} + +double MinAspectRatioFromConstraint(const blink::DoubleConstraint& constraint) { + if (!ConstraintHasMin(constraint)) + return 0.0; + + return ToValidAspectRatio(ConstraintMin(constraint)); +} + +double MaxAspectRatioFromConstraint(const blink::DoubleConstraint& constraint) { + if (!ConstraintHasMax(constraint)) + return HUGE_VAL; + + return ToValidAspectRatio(ConstraintMax(constraint)); +} + +bool IsPositiveFiniteAspectRatio(double aspect_ratio) { + return std::isfinite(aspect_ratio) && aspect_ratio > 0.0; +} + +// If |vertices| has a single element, return |vertices[0]|. +// If |vertices| has two elements, returns the point in the segment defined by +// |vertices| that is closest to |point|. +// |vertices| must have 1 or 2 elements. Otherwise, behavior is undefined. +// This function is called when |point| has already been determined to be +// outside a polygon and |vertices| is the vertex or side closest to |point|. +Point GetClosestPointToVertexOrSide(const std::vector<Point> vertices, + const Point& point) { + DCHECK(!vertices.empty()); + // If only a single vertex closest to |point|, return that vertex. + if (vertices.size() == 1U) + return vertices[0]; + + DCHECK_EQ(vertices.size(), 2U); + // If a polygon side is closest to the ideal height, return the + // point with aspect ratio closest to the default. + return Point::ClosestPointInSegment(point, vertices[0], vertices[1]); +} + +Point SelectPointWithLargestArea(const Point& p1, const Point& p2) { + return p1.width() * p1.height() > p2.width() * p2.height() ? p1 : p2; +} + +} // namespace + +Point::Point(double height, double width) : height_(height), width_(width) { + DCHECK(!std::isnan(height_)); + DCHECK(!std::isnan(width_)); +} +Point::Point(const Point& other) = default; +Point& Point::operator=(const Point& other) = default; +Point::~Point() = default; + +bool Point::operator==(const Point& other) const { + return height_ == other.height_ && width_ == other.width_; +} + +bool Point::operator!=(const Point& other) const { + return !(*this == other); +} + +bool Point::IsApproximatelyEqualTo(const Point& other) const { + return AreApproximatelyEqual(height_, other.height_) && + AreApproximatelyEqual(width_, other.width_); +} + +Point Point::operator+(const Point& other) const { + return Point(height_ + other.height_, width_ + other.width_); +} + +Point Point::operator-(const Point& other) const { + return Point(height_ - other.height_, width_ - other.width_); +} + +Point operator*(double d, const Point& p) { + return Point(d * p.height(), d * p.width()); +} + +// Returns the dot product between |p1| and |p2|. +// static +double Point::Dot(const Point& p1, const Point& p2) { + return p1.height_ * p2.height_ + p1.width_ * p2.width_; +} + +// static +double Point::SquareEuclideanDistance(const Point& p1, const Point& p2) { + Point diff = p1 - p2; + return Dot(diff, diff); +} + +// static +Point Point::ClosestPointInSegment(const Point& p, + const Point& s1, + const Point& s2) { + // If |s1| and |s2| are the same, it is not really a segment. The closest + // point to |p| is |s1|=|s2|. + if (s1 == s2) + return s1; + + // Translate coordinates to a system where the origin is |s1|. + Point p_trans = p - s1; + Point s2_trans = s2 - s1; + + // On this system, we are interested in the projection of |p_trans| on + // |s2_trans|. The projection is m * |s2_trans|, where + // m = Dot(|s2_trans|, |p_trans|) / Dot(|s2_trans|, |s2_trans|). + // If 0 <= m <= 1, the projection falls within the segment, and the closest + // point is the projection itself. + // If m < 0, the closest point is S1. + // If m > 1, the closest point is S2. + double m = Dot(s2_trans, p_trans) / Dot(s2_trans, s2_trans); + if (m < 0) + return s1; + else if (m > 1) + return s2; + + // Return the projection in the original coordinate system. + return s1 + m * s2_trans; +} + +ResolutionSet::ResolutionSet(int min_height, + int max_height, + int min_width, + int max_width, + double min_aspect_ratio, + double max_aspect_ratio) + : min_height_(min_height), + max_height_(max_height), + min_width_(min_width), + max_width_(max_width), + min_aspect_ratio_(min_aspect_ratio), + max_aspect_ratio_(max_aspect_ratio) { + DCHECK_GE(min_height_, 0); + DCHECK_GE(max_height_, 0); + DCHECK_LE(max_height_, kMaxDimension); + DCHECK_GE(min_width_, 0); + DCHECK_GE(max_width_, 0); + DCHECK_LE(max_width_, kMaxDimension); + DCHECK_GE(min_aspect_ratio_, 0.0); + DCHECK_GE(max_aspect_ratio_, 0.0); + DCHECK(!std::isnan(min_aspect_ratio_)); + DCHECK(!std::isnan(max_aspect_ratio_)); +} + +ResolutionSet::ResolutionSet() + : ResolutionSet(0, kMaxDimension, 0, kMaxDimension, 0.0, HUGE_VAL) {} + +ResolutionSet::ResolutionSet(const ResolutionSet& other) = default; +ResolutionSet::~ResolutionSet() = default; +ResolutionSet& ResolutionSet::operator=(const ResolutionSet& other) = default; + +bool ResolutionSet::IsHeightEmpty() const { + return min_height_ > max_height_ || min_height_ >= kMaxDimension || + max_height_ <= 0; +} + +bool ResolutionSet::IsWidthEmpty() const { + return min_width_ > max_width_ || min_width_ >= kMaxDimension || + max_width_ <= 0; +} + +bool ResolutionSet::IsAspectRatioEmpty() const { + double max_resolution_aspect_ratio = + static_cast<double>(max_width_) / static_cast<double>(min_height_); + double min_resolution_aspect_ratio = + static_cast<double>(min_width_) / static_cast<double>(max_height_); + + return IsGreater(min_aspect_ratio_, max_aspect_ratio_) || + IsLess(max_resolution_aspect_ratio, min_aspect_ratio_) || + IsGreater(min_resolution_aspect_ratio, max_aspect_ratio_) || + !std::isfinite(min_aspect_ratio_) || max_aspect_ratio_ <= 0.0; +} + +bool ResolutionSet::IsEmpty() const { + return IsHeightEmpty() || IsWidthEmpty() || IsAspectRatioEmpty(); +} + +bool ResolutionSet::ContainsPoint(const Point& point) const { + double ratio = point.AspectRatio(); + return point.height() >= min_height_ && point.height() <= max_height_ && + point.width() >= min_width_ && point.width() <= max_width_ && + ((IsGreaterOrEqual(ratio, min_aspect_ratio_) && + IsLessOrEqual(ratio, max_aspect_ratio_)) || + // (0.0, 0.0) is always included in the aspect-ratio range. + (point.width() == 0.0 && point.height() == 0.0)); +} + +bool ResolutionSet::ContainsPoint(int height, int width) const { + return ContainsPoint(Point(height, width)); +} + +ResolutionSet ResolutionSet::Intersection(const ResolutionSet& other) const { + return ResolutionSet(std::max(min_height_, other.min_height_), + std::min(max_height_, other.max_height_), + std::max(min_width_, other.min_width_), + std::min(max_width_, other.max_width_), + std::max(min_aspect_ratio_, other.min_aspect_ratio_), + std::min(max_aspect_ratio_, other.max_aspect_ratio_)); +} + +Point ResolutionSet::SelectClosestPointToIdeal( + const blink::WebMediaTrackConstraintSet& constraint_set) const { + DCHECK(!IsEmpty()); + int num_ideals = 0; + if (constraint_set.height.hasIdeal()) + ++num_ideals; + if (constraint_set.width.hasIdeal()) + ++num_ideals; + if (constraint_set.aspectRatio.hasIdeal()) + ++num_ideals; + + switch (num_ideals) { + case 0: + return SelectClosestPointToIdealAspectRatio(kDefaultAspectRatio); + + case 1: + // This case requires a point closest to a line. + // In all variants, if the ideal line intersects the polygon, select the + // point in the intersection that is closest to preserving the default + // aspect ratio or a default dimension. + // If the ideal line is outside the polygon, there is either a single + // vertex or a polygon side closest to the ideal line. If a single vertex, + // select that vertex. If a polygon side, select the point on that side + // that is closest to preserving the default aspect ratio or a default + // dimension. + if (constraint_set.height.hasIdeal()) { + int ideal_height = ToValidDimension(constraint_set.height.ideal()); + ResolutionSet ideal_line = ResolutionSet::FromExactHeight(ideal_height); + ResolutionSet intersection = Intersection(ideal_line); + if (!intersection.IsEmpty()) { + return intersection.ClosestPointTo( + Point(ideal_height, ideal_height * kDefaultAspectRatio)); + } + std::vector<Point> closest_vertices = + GetClosestVertices(&Point::height, ideal_height); + Point ideal_point(closest_vertices[0].height(), + closest_vertices[0].height() * kDefaultAspectRatio); + return GetClosestPointToVertexOrSide(closest_vertices, ideal_point); + } else if (constraint_set.width.hasIdeal()) { + int ideal_width = ToValidDimension(constraint_set.width.ideal()); + ResolutionSet ideal_line = ResolutionSet::FromExactWidth(ideal_width); + ResolutionSet intersection = Intersection(ideal_line); + if (!intersection.IsEmpty()) { + return intersection.ClosestPointTo( + Point(ideal_width / kDefaultAspectRatio, ideal_width)); + } + std::vector<Point> closest_vertices = + GetClosestVertices(&Point::width, ideal_width); + Point ideal_point(closest_vertices[0].width() / kDefaultAspectRatio, + closest_vertices[0].width()); + return GetClosestPointToVertexOrSide(closest_vertices, ideal_point); + } else { + DCHECK(constraint_set.aspectRatio.hasIdeal()); + double ideal_aspect_ratio = + ToValidAspectRatio(constraint_set.aspectRatio.ideal()); + return SelectClosestPointToIdealAspectRatio(ideal_aspect_ratio); + } + + case 2: + case 3: + double ideal_height; + double ideal_width; + if (constraint_set.height.hasIdeal()) { + ideal_height = ToValidDimension(constraint_set.height.ideal()); + ideal_width = + constraint_set.width.hasIdeal() + ? ToValidDimension(constraint_set.width.ideal()) + : ideal_height * + ToValidAspectRatio(constraint_set.aspectRatio.ideal()); + } else { + DCHECK(constraint_set.width.hasIdeal()); + DCHECK(constraint_set.aspectRatio.hasIdeal()); + ideal_width = ToValidDimension(constraint_set.width.ideal()); + ideal_height = ideal_width / + ToValidAspectRatio(constraint_set.aspectRatio.ideal()); + } + return ClosestPointTo(Point(ideal_height, ideal_width)); + + default: + NOTREACHED(); + } + NOTREACHED(); + return Point(-1, -1); +} + +Point ResolutionSet::SelectClosestPointToIdealAspectRatio( + double ideal_aspect_ratio) const { + ResolutionSet intersection = + Intersection(ResolutionSet::FromExactAspectRatio(ideal_aspect_ratio)); + if (!intersection.IsEmpty()) { + Point default_height_point(kDefaultHeight, + kDefaultHeight * ideal_aspect_ratio); + Point default_width_point(kDefaultWidth / ideal_aspect_ratio, + kDefaultWidth); + return SelectPointWithLargestArea( + intersection.ClosestPointTo(default_height_point), + intersection.ClosestPointTo(default_width_point)); + } + std::vector<Point> closest_vertices = + GetClosestVertices(&Point::AspectRatio, ideal_aspect_ratio); + double actual_aspect_ratio = closest_vertices[0].AspectRatio(); + Point default_height_point(kDefaultHeight, + kDefaultHeight * actual_aspect_ratio); + Point default_width_point(kDefaultWidth / actual_aspect_ratio, kDefaultWidth); + return SelectPointWithLargestArea( + GetClosestPointToVertexOrSide(closest_vertices, default_height_point), + GetClosestPointToVertexOrSide(closest_vertices, default_width_point)); +} + +Point ResolutionSet::ClosestPointTo(const Point& point) const { + DCHECK(std::numeric_limits<double>::has_infinity); + + if (ContainsPoint(point)) + return point; + + auto vertices = ComputeVertices(); + DCHECK_GE(vertices.size(), 1U); + Point best_candidate(0, 0); + double best_distance = HUGE_VAL; + for (size_t i = 0; i < vertices.size(); ++i) { + Point candidate = Point::ClosestPointInSegment( + point, vertices[i], vertices[(i + 1) % vertices.size()]); + double distance = Point::SquareEuclideanDistance(point, candidate); + if (distance < best_distance) { + best_candidate = candidate; + best_distance = distance; + } + } + + DCHECK(std::isfinite(best_distance)); + return best_candidate; +} + +std::vector<Point> ResolutionSet::GetClosestVertices(double (Point::*accessor)() + const, + double value) const { + DCHECK(!IsEmpty()); + std::vector<Point> vertices = ComputeVertices(); + std::vector<Point> closest_vertices; + double best_diff = HUGE_VAL; + for (const auto& vertex : vertices) { + double diff; + if (std::isfinite(value)) + diff = std::fabs((vertex.*accessor)() - value); + else + diff = (vertex.*accessor)() == value ? 0.0 : HUGE_VAL; + if (diff <= best_diff) { + if (diff < best_diff) { + best_diff = diff; + closest_vertices.clear(); + } + closest_vertices.push_back(vertex); + } + } + DCHECK(!closest_vertices.empty()); + DCHECK_LE(closest_vertices.size(), 2U); + return closest_vertices; +} + +// static +ResolutionSet ResolutionSet::FromHeight(int min, int max) { + return ResolutionSet(min, max, 0, kMaxDimension, 0.0, HUGE_VAL); +} + +// static +ResolutionSet ResolutionSet::FromExactHeight(int value) { + return ResolutionSet(value, value, 0, kMaxDimension, 0.0, HUGE_VAL); +} + +// static +ResolutionSet ResolutionSet::FromWidth(int min, int max) { + return ResolutionSet(0, kMaxDimension, min, max, 0.0, HUGE_VAL); +} + +// static +ResolutionSet ResolutionSet::FromExactWidth(int value) { + return ResolutionSet(0, kMaxDimension, value, value, 0.0, HUGE_VAL); +} + +// static +ResolutionSet ResolutionSet::FromAspectRatio(double min, double max) { + return ResolutionSet(0, kMaxDimension, 0, kMaxDimension, min, max); +} + +// static +ResolutionSet ResolutionSet::FromExactAspectRatio(double value) { + return ResolutionSet(0, kMaxDimension, 0, kMaxDimension, value, value); +} + +std::vector<Point> ResolutionSet::ComputeVertices() const { + std::vector<Point> vertices; + // Add vertices in counterclockwise order + // Start with (min_height, min_width) and continue along min_width. + TryAddVertex(&vertices, Point(min_height_, min_width_)); + if (IsPositiveFiniteAspectRatio(max_aspect_ratio_)) + TryAddVertex(&vertices, Point(min_width_ / max_aspect_ratio_, min_width_)); + if (IsPositiveFiniteAspectRatio(min_aspect_ratio_)) + TryAddVertex(&vertices, Point(min_width_ / min_aspect_ratio_, min_width_)); + TryAddVertex(&vertices, Point(max_height_, min_width_)); + // Continue along max_height. + if (IsPositiveFiniteAspectRatio(min_aspect_ratio_)) { + TryAddVertex(&vertices, + Point(max_height_, max_height_ * min_aspect_ratio_)); + } + if (IsPositiveFiniteAspectRatio(max_aspect_ratio_)) + TryAddVertex(&vertices, + Point(max_height_, max_height_ * max_aspect_ratio_)); + TryAddVertex(&vertices, Point(max_height_, max_width_)); + // Continue along max_width. + if (IsPositiveFiniteAspectRatio(min_aspect_ratio_)) + TryAddVertex(&vertices, Point(max_width_ / min_aspect_ratio_, max_width_)); + if (IsPositiveFiniteAspectRatio(max_aspect_ratio_)) + TryAddVertex(&vertices, Point(max_width_ / max_aspect_ratio_, max_width_)); + TryAddVertex(&vertices, Point(min_height_, max_width_)); + // Finish along min_height. + if (IsPositiveFiniteAspectRatio(max_aspect_ratio_)) { + TryAddVertex(&vertices, + Point(min_height_, min_height_ * max_aspect_ratio_)); + } + if (IsPositiveFiniteAspectRatio(min_aspect_ratio_)) { + TryAddVertex(&vertices, + Point(min_height_, min_height_ * min_aspect_ratio_)); + } + + DCHECK_LE(vertices.size(), 6U); + return vertices; +} + +void ResolutionSet::TryAddVertex(std::vector<Point>* vertices, + const Point& point) const { + if (!ContainsPoint(point)) + return; + + // Add the point to the |vertices| if not already added. + // This is to prevent duplicates in case an aspect ratio intersects a width + // or height right on a vertex. + if (vertices->empty() || + (*(vertices->end() - 1) != point && *vertices->begin() != point)) { + vertices->push_back(point); + } +} + +ResolutionSet ResolutionSet::FromConstraintSet( + const blink::WebMediaTrackConstraintSet& constraint_set) { + return ResolutionSet( + MinDimensionFromConstraint(constraint_set.height), + MaxDimensionFromConstraint(constraint_set.height), + MinDimensionFromConstraint(constraint_set.width), + MaxDimensionFromConstraint(constraint_set.width), + MinAspectRatioFromConstraint(constraint_set.aspectRatio), + MaxAspectRatioFromConstraint(constraint_set.aspectRatio)); +} + +} // namespace content
diff --git a/content/renderer/media/media_stream_constraints_util_sets.h b/content/renderer/media/media_stream_constraints_util_sets.h new file mode 100644 index 0000000..1819d996 --- /dev/null +++ b/content/renderer/media/media_stream_constraints_util_sets.h
@@ -0,0 +1,356 @@ +// Copyright 2017 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. + +#ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_CONSTRAINTS_UTIL_SETS_H_ +#define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_CONSTRAINTS_UTIL_SETS_H_ + +#include <algorithm> +#include <limits> +#include <utility> +#include <vector> + +#include "base/gtest_prod_util.h" +#include "base/logging.h" +#include "content/common/content_export.h" +#include "content/renderer/media/media_stream_constraints_util.h" + +namespace blink { +struct WebMediaTrackConstraintSet; +} + +namespace content { + +// This class template represents a set of candidates suitable for a numeric +// range-based constraint. +template <typename T> +class NumericRangeSet { + public: + NumericRangeSet() : min_(0), max_(DefaultMax()) {} + NumericRangeSet(T min, T max) : min_(min), max_(max) {} + NumericRangeSet(const NumericRangeSet& other) = default; + NumericRangeSet& operator=(const NumericRangeSet& other) = default; + ~NumericRangeSet() = default; + + T Min() const { return min_; } + T Max() const { return max_; } + bool IsEmpty() const { return max_ < min_; } + + NumericRangeSet Intersection(const NumericRangeSet& other) const { + return NumericRangeSet(std::max(min_, other.min_), + std::min(max_, other.max_)); + } + + // Creates a NumericRangeSet based on the minimum and maximum values of + // |constraint|. + template <typename ConstraintType> + static auto FromConstraint(ConstraintType constraint) + -> NumericRangeSet<decltype(constraint.min())> { + return NumericRangeSet<decltype(constraint.min())>( + ConstraintHasMin(constraint) ? ConstraintMin(constraint) : 0, + ConstraintHasMax(constraint) ? ConstraintMax(constraint) + : DefaultMax()); + } + + private: + static inline T DefaultMax() { + return std::numeric_limits<T>::has_infinity + ? std::numeric_limits<T>::infinity() + : std::numeric_limits<T>::max(); + } + T min_; + T max_; +}; + +// This class defines a set of discrete elements suitable for resolving +// constraints with a countable number of choices not suitable to be constrained +// by range. Examples are strings, booleans and certain constraints of type +// long. A DiscreteSet can be empty, have their elements explicitly stated, or +// be the universal set. The universal set is a set that contains all possible +// elements. The specific definition of what elements are in the universal set +// is application defined (e.g., it could be all possible boolean values, all +// possible strings of length N, or anything that suits a particular +// application). +template <typename T> +class DiscreteSet { + public: + // Creates a set containing the elements in |elements|. + // It is the responsibility of the caller to ensure that |elements| is not + // equivalent to the universal set and that |elements| has no repeated + // values. Takes ownership of |elements|. + explicit DiscreteSet(std::vector<T> elements) + : is_universal_(false), elements_(std::move(elements)) {} + // Creates an empty set; + static DiscreteSet EmptySet() { return DiscreteSet(std::vector<T>()); } + static DiscreteSet UniversalSet() { return DiscreteSet(); } + + DiscreteSet(const DiscreteSet& other) = default; + DiscreteSet& operator=(const DiscreteSet& other) = default; + DiscreteSet(DiscreteSet&& other) = default; + DiscreteSet& operator=(DiscreteSet&& other) = default; + ~DiscreteSet() = default; + + bool Contains(const T& value) const { + return is_universal_ || std::find(elements_.begin(), elements_.end(), + value) != elements_.end(); + } + + bool IsEmpty() const { return !is_universal_ && elements_.empty(); } + + bool HasExplicitElements() const { return !elements_.empty(); } + + DiscreteSet Intersection(const DiscreteSet& other) const { + if (is_universal_) + return other; + if (other.is_universal_) + return *this; + if (IsEmpty() || other.IsEmpty()) + return EmptySet(); + + // Both sets have explicit elements. + std::vector<T> intersection; + for (const auto& entry : elements_) { + auto it = + std::find(other.elements_.begin(), other.elements_.end(), entry); + if (it != other.elements_.end()) { + intersection.push_back(entry); + } + } + return DiscreteSet(std::move(intersection)); + } + + // Returns a copy of the first element in the set. This is useful as a simple + // tie-breaker rule. This applies only to constrained nonempty sets. + // Behavior is undefined if the set is empty or universal. + T FirstElement() const { + DCHECK(HasExplicitElements()); + return elements_[0]; + } + + bool is_universal() const { return is_universal_; } + + private: + // Creates a universal set. + DiscreteSet() : is_universal_(true) {} + + bool is_universal_; + std::vector<T> elements_; +}; + +// This class represents a set of (height, width) screen resolution candidates +// determined by width, height and aspect-ratio constraints. +// This class supports widths and heights from 0 to kMaxDimension, both +// inclusive and aspect ratios from 0.0 to positive infinity, both inclusive. +class CONTENT_EXPORT ResolutionSet { + public: + static constexpr int kMaxDimension = std::numeric_limits<int>::max(); + + // Helper class that represents (height, width) points on a plane. + // TODO(guidou): Use a generic point/vector class that uses double once it + // becomes available (e.g., a gfx::Vector2dD). + class CONTENT_EXPORT Point { + public: + // Creates a (|height|, |width|) point. |height| and |width| must be finite. + Point(double height, double width); + Point(const Point& other); + Point& operator=(const Point& other); + ~Point(); + + // Accessors. + double height() const { return height_; } + double width() const { return width_; } + double AspectRatio() const { return width_ / height_; } + + // Exact equality/inequality operators. + bool operator==(const Point& other) const; + bool operator!=(const Point& other) const; + + // Returns true if the coordinates of this point and |other| are + // approximately equal. + bool IsApproximatelyEqualTo(const Point& other) const; + + // Vector-style addition and subtraction operators. + Point operator+(const Point& other) const; + Point operator-(const Point& other) const; + + // Returns the dot product between |p1| and |p2|. + static double Dot(const Point& p1, const Point& p2); + + // Returns the square Euclidean distance between |p1| and |p2|. + static double SquareEuclideanDistance(const Point& p1, const Point& p2); + + // Returns the point in the line segment determined by |s1| and |s2| that + // is closest to |p|. + static Point ClosestPointInSegment(const Point& p, + const Point& s1, + const Point& s2); + + private: + double height_; + double width_; + }; + + // Creates a set with the maximum supported ranges for width, height and + // aspect ratio. + ResolutionSet(); + ResolutionSet(int min_height, + int max_height, + int min_width, + int max_width, + double min_aspect_ratio, + double max_aspect_ratio); + ResolutionSet(const ResolutionSet& other); + ResolutionSet& operator=(const ResolutionSet& other); + ~ResolutionSet(); + + // Getters. + int min_height() const { return min_height_; } + int max_height() const { return max_height_; } + int min_width() const { return min_width_; } + int max_width() const { return max_width_; } + double min_aspect_ratio() const { return min_aspect_ratio_; } + double max_aspect_ratio() const { return max_aspect_ratio_; } + + // Returns true if this set is empty. + bool IsEmpty() const; + + // These functions return true if a particular variable causes the set to be + // empty. + bool IsHeightEmpty() const; + bool IsWidthEmpty() const; + bool IsAspectRatioEmpty() const; + + // These functions return true if the given point is included in this set. + bool ContainsPoint(const Point& point) const; + bool ContainsPoint(int height, int width) const; + + // Returns a new set with the intersection of |*this| and |other|. + ResolutionSet Intersection(const ResolutionSet& other) const; + + // Returns a point in this (nonempty) set closest to the ideal values for the + // height, width and aspectRatio constraints in |constraint_set|. + // Note that this function ignores all the other data in |constraint_set|. + // Only the ideal height, width and aspect ratio are used, and from now on + // referred to as |ideal_height|, |ideal_width| and |ideal_aspect_ratio| + // respectively. + // + // * If all three ideal values are given, |ideal_aspect_ratio| is ignored and + // the point closest to (|ideal_height|, |ideal_width|) is returned. + // * If two ideal values are given, they are used to determine a single ideal + // point, which can be one of: + // - (|ideal_height|, |ideal_width|), + // - (|ideal_height|, |ideal_height|*|ideal_aspect_ratio|), or + // - (|ideal_width| / |ideal_aspect_ratio|, |ideal_width|). + // The point in the set closest to the ideal point is returned. + // * If a single ideal value is given, a point in the set closest to the line + // defined by the ideal value is returned. If there is more than one point + // closest to the ideal line, the following tie-breaker rules are used: + // - If |ideal_height| is provided, the point closest to + // (|ideal_height|, |ideal_height| * kDefaultAspectRatio). + // - If |ideal_width| is provided, the point closest to + // (|ideal_width| / kDefaultAspectRatio, |ideal_width|). + // - If |ideal_aspect_ratio| is provided, the point with largest area among + // the points closest to + // (kDefaultHeight, kDefaultHeight * aspect_ratio) and + // (kDefaultWidth / aspect_ratio, kDefaultWidth), + // where aspect_ratio is |ideal_aspect_ratio| if the ideal line intersects + // the set, and the closest aspect ratio to |ideal_aspect_ratio| among the + // points in the set if no point in the set has an aspect ratio equal to + // |ideal_aspect_ratio|. + // * If no ideal value is given, proceed as if only |ideal_aspect_ratio| was + // provided with a value of kDefaultAspectRatio. + // + // This is intended to support the implementation of the spec algorithm for + // selection of track settings, as defined in + // https://w3c.github.io/mediacapture-main/#dfn-selectsettings. + // + // The main difference between this algorithm and the spec is that when ideal + // values are provided, the spec mandates finding a point that minimizes the + // sum of custom relative distances for each provided ideal value, while this + // algorithm minimizes either the Euclidean distance (sum of square distances) + // on a height-width plane for the cases where two or three ideal values are + // provided, or the absolute distance for the case with one ideal value. + // Also, in the case with three ideal values, this algorithm ignores the + // distance to the ideal aspect ratio. + // In most cases the difference in the final result should be negligible. + // The reason to follow this approach is that optimization in the worst case + // is reduced to projection of a point on line segment, which is a simple + // operation that provides exact results. Using the distance function of the + // spec, which is not continuous, would require complex optimization methods + // that do not necessarily guarantee finding the real optimal value. + // + // This function has undefined behavior if this set is empty. + Point SelectClosestPointToIdeal( + const blink::WebMediaTrackConstraintSet& constraint_set) const; + + // Utilities that return ResolutionSets constrained on a specific variable. + static ResolutionSet FromHeight(int min, int max); + static ResolutionSet FromExactHeight(int value); + static ResolutionSet FromWidth(int min, int max); + static ResolutionSet FromExactWidth(int value); + static ResolutionSet FromAspectRatio(double min, double max); + static ResolutionSet FromExactAspectRatio(double value); + + // Returns a ResolutionCandidateSet initialized with |constraint_set|'s + // width, height and aspectRatio constraints. + static ResolutionSet FromConstraintSet( + const blink::WebMediaTrackConstraintSet& constraint_set); + + private: + FRIEND_TEST_ALL_PREFIXES(MediaStreamConstraintsUtilSetsTest, + ResolutionVertices); + FRIEND_TEST_ALL_PREFIXES(MediaStreamConstraintsUtilSetsTest, + ResolutionPointSetClosestPoint); + FRIEND_TEST_ALL_PREFIXES(MediaStreamConstraintsUtilSetsTest, + ResolutionLineSetClosestPoint); + FRIEND_TEST_ALL_PREFIXES(MediaStreamConstraintsUtilSetsTest, + ResolutionGeneralSetClosestPoint); + FRIEND_TEST_ALL_PREFIXES(MediaStreamConstraintsUtilSetsTest, + ResolutionIdealOutsideSinglePoint); + + // Implements SelectClosestPointToIdeal() for the case when only the ideal + // aspect ratio is provided. + Point SelectClosestPointToIdealAspectRatio(double ideal_aspect_ratio) const; + + // Returns the closest point in this set to |point|. If |point| is included in + // this set, Point is returned. If this set is empty, behavior is undefined. + Point ClosestPointTo(const Point& point) const; + + // Returns the vertices of the set that have the property accessed + // by |accessor| closest to |value|. The returned vector always has one or two + // elements. Behavior is undefined if the set is empty. + std::vector<Point> GetClosestVertices(double (Point::*accessor)() const, + double value) const; + + // Returns a list of the vertices defined by the constraints on a height-width + // Cartesian plane. + // If the list is empty, the set is empty. + // If the list contains a single point, the set contains a single point. + // If the list contains two points, the set is composed of points on a line + // segment. + // If the list contains three to six points, they are the vertices of a + // convex polygon containing all valid points in the set. Each pair of + // consecutive vertices (modulo the size of the list) corresponds to a side of + // the polygon, with the vertices given in counterclockwise order. + // The list cannot contain more than six points. + std::vector<Point> ComputeVertices() const; + + // Adds |point| to |vertices| if |point| is included in this candidate set. + void TryAddVertex(std::vector<ResolutionSet::Point>* vertices, + const ResolutionSet::Point& point) const; + + int min_height_; + int max_height_; + int min_width_; + int max_width_; + double min_aspect_ratio_; + double max_aspect_ratio_; +}; + +// Scalar multiplication for Points. +ResolutionSet::Point CONTENT_EXPORT operator*(double d, + const ResolutionSet::Point& p); + +} // namespace content + +#endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_CONSTRAINTS_UTIL_SETS_H_
diff --git a/content/renderer/media/media_stream_constraints_util_sets_unittest.cc b/content/renderer/media/media_stream_constraints_util_sets_unittest.cc new file mode 100644 index 0000000..b76134d --- /dev/null +++ b/content/renderer/media/media_stream_constraints_util_sets_unittest.cc
@@ -0,0 +1,1281 @@ +// Copyright 2017 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. + +#include "content/renderer/media/media_stream_constraints_util_sets.h" + +#include <cmath> +#include <string> +#include <vector> + +#include "content/renderer/media/media_stream_video_source.h" +#include "content/renderer/media/mock_constraint_factory.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace content { + +using Point = ResolutionSet::Point; + +namespace { + +// Defined as macro in order to get more informative line-number information +// when a test fails. +#define EXPECT_POINT_EQ(p1, p2) \ + do { \ + EXPECT_DOUBLE_EQ((p1).height(), (p2).height()); \ + EXPECT_DOUBLE_EQ((p1).width(), (p2).width()); \ + } while (0) + +// Checks if |point| is an element of |vertices| using +// Point::IsApproximatelyEqualTo() to test for equality. +void VerticesContain(const std::vector<Point>& vertices, const Point& point) { + bool result = false; + for (const auto& vertex : vertices) { + if (point.IsApproximatelyEqualTo(vertex)) { + result = true; + break; + } + } + EXPECT_TRUE(result); +} + +bool AreCounterclockwise(const std::vector<Point>& vertices) { + // Single point or segment are trivial cases. + if (vertices.size() <= 2) + return true; + else if (vertices.size() > 6) // Polygons of more than 6 sides are not valid. + return false; + + // The polygon defined by a resolution set is always convex and has at most 6 + // sides. When producing a list of the vertices for such a polygon, it is + // important that they are returned in counterclockwise (or clockwise) order, + // to make sure that any consecutive pair of vertices (modulo the number of + // vertices) corresponds to a polygon side. Our implementation uses + // counterclockwise order. + // Compute orientation using the determinant of each diagonal in the + // polygon, using the first vertex as reference. + Point prev_diagonal = vertices[1] - vertices[0]; + for (auto vertex = vertices.begin() + 2; vertex != vertices.end(); ++vertex) { + Point current_diagonal = *vertex - vertices[0]; + // The determinant of the two diagonals returns the signed area of the + // parallelogram they generate. The area is positive if the diagonals are in + // counterclockwise order, zero if the diagonals have the same direction and + // negative if the diagonals are in clockwise order. + // See https://en.wikipedia.org/wiki/Determinant#2_.C3.97_2_matrices. + double det = prev_diagonal.height() * current_diagonal.width() - + current_diagonal.height() * prev_diagonal.width(); + if (det <= 0) + return false; + prev_diagonal = current_diagonal; + } + return true; +} + +// Determines if |vertices| is valid according to the contract for +// ResolutionCandidateSet::ComputeVertices(). +bool AreValidVertices(const ResolutionSet& set, + const std::vector<Point>& vertices) { + // Verify that every vertex is included in |set|. + for (const auto& vertex : vertices) { + if (!set.ContainsPoint(vertex)) + return false; + } + + return AreCounterclockwise(vertices); +} + +// This function provides an alternative method for computing the projection +// of |point| on the line of segment |s1||s2| to be used to compare the results +// provided by Point::ClosestPointInSegment(). Since it relies on library +// functions, it has larger error in practice than +// Point::ClosestPointInSegment(), so results must be compared with +// Point::IsApproximatelyEqualTo(). +// This function only computes projections. The result may be outside the +// segment |s1||s2|. +Point ProjectionOnSegmentLine(const Point& point, + const Point& s1, + const Point& s2) { + double segment_slope = + (s2.width() - s1.width()) / (s2.height() - s1.height()); + double segment_angle = std::atan(segment_slope); + double norm = std::sqrt(Point::Dot(point, point)); + double angle = + (point.height() == 0 && point.width() == 0) + ? 0.0 + : std::atan(point.width() / point.height()) - segment_angle; + double projection_length = norm * std::cos(angle); + double projection_height = projection_length * std::cos(segment_angle); + double projection_width = projection_length * std::sin(segment_angle); + return Point(projection_height, projection_width); +} + +} // namespace + +class MediaStreamConstraintsUtilSetsTest : public testing::Test { + protected: + using P = Point; + MockConstraintFactory factory_; +}; + +// This test tests the test-harness function AreValidVertices. +TEST_F(MediaStreamConstraintsUtilSetsTest, VertexListValidity) { + EXPECT_TRUE(AreCounterclockwise({P(1, 1)})); + EXPECT_TRUE(AreCounterclockwise({P(1, 1)})); + EXPECT_TRUE(AreCounterclockwise({P(1, 0), P(0, 1)})); + EXPECT_TRUE(AreCounterclockwise({P(1, 1), P(0, 0), P(1, 0)})); + + // Not in counterclockwise order. + EXPECT_FALSE(AreCounterclockwise({P(1, 0), P(0, 0), P(1, 1)})); + + // Final vertex aligned with the previous two vertices. + EXPECT_FALSE(AreCounterclockwise({P(1, 0), P(1, 1), P(1, 1.5), P(1, 0.1)})); + + // Not in counterclockwise order. + EXPECT_FALSE( + AreCounterclockwise({P(1, 0), P(3, 0), P(2, 2), P(3.1, 1), P(0, 1)})); + + EXPECT_TRUE(AreCounterclockwise( + {P(1, 0), P(3, 0), P(3.1, 1), P(3, 2), P(1, 2), P(0.9, 1)})); + + // Not in counterclockwise order. + EXPECT_FALSE(AreCounterclockwise( + {P(1, 0), P(3, 0), P(3.1, 1), P(1, 2), P(3, 2), P(0.9, 1)})); + + // Counterclockwise, but more than 6 vertices. + EXPECT_FALSE(AreCounterclockwise( + {P(1, 0), P(3, 0), P(3.1, 1), P(3, 2), P(2, 2.1), P(1, 2), P(0.9, 1)})); +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, PointOperations) { + const Point kZero(0, 0); + + // Basic equality and inequality + EXPECT_EQ(P(0, 0), kZero); + EXPECT_EQ(P(50, 50), P(50, 50)); + EXPECT_NE(kZero, P(50, 50)); + EXPECT_NE(P(50, 50), P(100, 100)); + EXPECT_NE(P(50, 50), P(100, 50)); + + // Operations with zero. + EXPECT_EQ(kZero, kZero + kZero); + EXPECT_EQ(kZero, kZero - kZero); + EXPECT_EQ(kZero, 0.0 * kZero); + EXPECT_EQ(0.0, P::Dot(kZero, kZero)); + EXPECT_EQ(0.0, P::SquareEuclideanDistance(kZero, kZero)); + EXPECT_EQ(kZero, P::ClosestPointInSegment(kZero, kZero, kZero)); + + // Operations with zero and nonzero values. + EXPECT_EQ(P(50, 50), kZero + P(50, 50)); + EXPECT_EQ(P(50, 50) + kZero, kZero + P(50, 50)); + EXPECT_EQ(P(50, 50), P(50, 50) - kZero); + EXPECT_EQ(kZero, P(50, 50) - P(50, 50)); + EXPECT_EQ(kZero, 0.0 * P(50, 50)); + EXPECT_EQ(0.0, P::Dot(kZero, P(50, 50))); + EXPECT_EQ(0.0, P::Dot(P(50, 50), kZero)); + EXPECT_EQ(5000, P::SquareEuclideanDistance(kZero, P(50, 50))); + EXPECT_EQ(P::SquareEuclideanDistance(P(50, 50), kZero), + P::SquareEuclideanDistance(kZero, P(50, 50))); + EXPECT_EQ(kZero, P::ClosestPointInSegment(kZero, kZero, P(50, 50))); + EXPECT_EQ(kZero, P::ClosestPointInSegment(kZero, P(50, 50), kZero)); + EXPECT_EQ(P(50, 50), + P::ClosestPointInSegment(P(50, 50), P(50, 50), P(50, 50))); + + // Operations with nonzero values. + // Additions. + EXPECT_EQ(P(100, 50), P(50, 50) + P(50, 0)); + EXPECT_EQ(P(100, 50), P(50, 0) + P(50, 50)); + + // Substractions. + EXPECT_EQ(P(50, 50), P(100, 100) - P(50, 50)); + EXPECT_EQ(P(50, 50), P(100, 50) - P(50, 0)); + EXPECT_EQ(P(50, 0), P(100, 50) - P(50, 50)); + + // Scalar-vector products. + EXPECT_EQ(P(50, 50), 1.0 * P(50, 50)); + EXPECT_EQ(P(75, 75), 1.5 * P(50, 50)); + EXPECT_EQ(P(200, 100), 2.0 * P(100, 50)); + EXPECT_EQ(2.0 * (P(100, 100) + P(100, 50)), + 2.0 * P(100, 100) + 2.0 * P(100, 50)); + + // Dot products. + EXPECT_EQ(2 * 50 * 100, P::Dot(P(50, 50), P(100, 100))); + EXPECT_EQ(P::Dot(P(100, 100), P(50, 50)), P::Dot(P(50, 50), P(100, 100))); + EXPECT_EQ(0, P::Dot(P(100, 0), P(0, 100))); + + // Distances. + EXPECT_EQ(25, P::SquareEuclideanDistance(P(4, 0), P(0, 3))); + EXPECT_EQ(75 * 75, P::SquareEuclideanDistance(P(100, 0), P(25, 0))); + EXPECT_EQ(75 * 75, P::SquareEuclideanDistance(P(0, 100), P(0, 25))); + EXPECT_EQ(5 * 5 + 9 * 9, P::SquareEuclideanDistance(P(5, 1), P(10, 10))); + + // Closest point to segment from (10,0) to (50,0). + EXPECT_EQ(P(25, 0), P::ClosestPointInSegment(P(25, 25), P(10, 0), P(50, 0))); + EXPECT_EQ(P(50, 0), + P::ClosestPointInSegment(P(100, 100), P(10, 0), P(50, 0))); + EXPECT_EQ(P(10, 0), P::ClosestPointInSegment(P(0, 100), P(10, 0), P(50, 0))); + + // Closest point to segment from (0,10) to (0,50). + EXPECT_EQ(P(0, 25), P::ClosestPointInSegment(P(25, 25), P(0, 10), P(0, 50))); + EXPECT_EQ(P(0, 50), + P::ClosestPointInSegment(P(100, 100), P(0, 10), P(0, 50))); + EXPECT_EQ(P(0, 10), P::ClosestPointInSegment(P(100, 0), P(0, 10), P(0, 50))); + + // Closest point to segment from (0,10) to (10,0). + EXPECT_EQ(P(5, 5), P::ClosestPointInSegment(P(25, 25), P(0, 10), P(10, 0))); + EXPECT_EQ(P(5, 5), P::ClosestPointInSegment(P(100, 100), P(0, 10), P(10, 0))); + EXPECT_EQ(P(10, 0), P::ClosestPointInSegment(P(100, 0), P(0, 10), P(10, 0))); + EXPECT_EQ(P(0, 10), P::ClosestPointInSegment(P(0, 100), P(0, 10), P(10, 0))); +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionUnconstrained) { + ResolutionSet set; + EXPECT_TRUE(set.ContainsPoint(0, 0)); + EXPECT_TRUE(set.ContainsPoint(1, 1)); + EXPECT_TRUE(set.ContainsPoint(2000, 2000)); + EXPECT_FALSE(set.IsHeightEmpty()); + EXPECT_FALSE(set.IsWidthEmpty()); + EXPECT_FALSE(set.IsAspectRatioEmpty()); +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionConstrained) { + ResolutionSet set = ResolutionSet::FromHeight(10, 100); + EXPECT_FALSE(set.ContainsPoint(0, 0)); + EXPECT_TRUE(set.ContainsPoint(10, 10)); + EXPECT_TRUE(set.ContainsPoint(50, 50)); + EXPECT_TRUE(set.ContainsPoint(100, 100)); + EXPECT_FALSE(set.ContainsPoint(500, 500)); + EXPECT_FALSE(set.IsHeightEmpty()); + EXPECT_FALSE(set.IsWidthEmpty()); + EXPECT_FALSE(set.IsAspectRatioEmpty()); + + set = ResolutionSet::FromHeight(0, 100); + EXPECT_TRUE(set.ContainsPoint(0, 0)); + EXPECT_TRUE(set.ContainsPoint(10, 10)); + EXPECT_TRUE(set.ContainsPoint(50, 50)); + EXPECT_TRUE(set.ContainsPoint(100, 100)); + EXPECT_FALSE(set.ContainsPoint(500, 500)); + EXPECT_FALSE(set.IsHeightEmpty()); + EXPECT_FALSE(set.IsWidthEmpty()); + EXPECT_FALSE(set.IsAspectRatioEmpty()); + + set = ResolutionSet::FromHeight(100, ResolutionSet::kMaxDimension); + EXPECT_FALSE(set.ContainsPoint(0, 0)); + EXPECT_FALSE(set.ContainsPoint(10, 10)); + EXPECT_FALSE(set.ContainsPoint(50, 50)); + EXPECT_TRUE(set.ContainsPoint(100, 100)); + EXPECT_TRUE(set.ContainsPoint(500, 500)); + EXPECT_FALSE(set.IsHeightEmpty()); + EXPECT_FALSE(set.IsWidthEmpty()); + EXPECT_FALSE(set.IsAspectRatioEmpty()); + + set = ResolutionSet::FromWidth(10, 100); + EXPECT_FALSE(set.ContainsPoint(0, 0)); + EXPECT_TRUE(set.ContainsPoint(10, 10)); + EXPECT_TRUE(set.ContainsPoint(50, 50)); + EXPECT_TRUE(set.ContainsPoint(100, 100)); + EXPECT_FALSE(set.ContainsPoint(500, 500)); + EXPECT_FALSE(set.IsHeightEmpty()); + EXPECT_FALSE(set.IsWidthEmpty()); + EXPECT_FALSE(set.IsAspectRatioEmpty()); + + set = ResolutionSet::FromWidth(0, 100); + EXPECT_TRUE(set.ContainsPoint(0, 0)); + EXPECT_TRUE(set.ContainsPoint(10, 10)); + EXPECT_TRUE(set.ContainsPoint(50, 50)); + EXPECT_TRUE(set.ContainsPoint(100, 100)); + EXPECT_FALSE(set.ContainsPoint(500, 500)); + EXPECT_FALSE(set.IsHeightEmpty()); + EXPECT_FALSE(set.IsWidthEmpty()); + EXPECT_FALSE(set.IsAspectRatioEmpty()); + + set = ResolutionSet::FromWidth(100, ResolutionSet::kMaxDimension); + EXPECT_FALSE(set.ContainsPoint(0, 0)); + EXPECT_FALSE(set.ContainsPoint(10, 10)); + EXPECT_FALSE(set.ContainsPoint(50, 50)); + EXPECT_TRUE(set.ContainsPoint(100, 100)); + EXPECT_TRUE(set.ContainsPoint(500, 500)); + EXPECT_FALSE(set.IsHeightEmpty()); + EXPECT_FALSE(set.IsWidthEmpty()); + EXPECT_FALSE(set.IsAspectRatioEmpty()); + + set = ResolutionSet::FromAspectRatio(1.0, 2.0); + EXPECT_TRUE(set.ContainsPoint(0, 0)); + EXPECT_TRUE(set.ContainsPoint(10, 10)); + EXPECT_TRUE(set.ContainsPoint(10, 20)); + EXPECT_TRUE(set.ContainsPoint(100, 100)); + EXPECT_TRUE(set.ContainsPoint(2000, 4000)); + EXPECT_FALSE(set.ContainsPoint(1, 50)); + EXPECT_FALSE(set.ContainsPoint(50, 1)); + EXPECT_FALSE(set.IsHeightEmpty()); + EXPECT_FALSE(set.IsWidthEmpty()); + EXPECT_FALSE(set.IsAspectRatioEmpty()); + + set = ResolutionSet::FromAspectRatio(0.0, 2.0); + EXPECT_TRUE(set.ContainsPoint(0, 0)); + EXPECT_TRUE(set.ContainsPoint(10, 10)); + EXPECT_TRUE(set.ContainsPoint(10, 20)); + EXPECT_TRUE(set.ContainsPoint(100, 100)); + EXPECT_TRUE(set.ContainsPoint(2000, 4000)); + EXPECT_FALSE(set.ContainsPoint(1, 50)); + EXPECT_TRUE(set.ContainsPoint(50, 1)); + EXPECT_FALSE(set.IsHeightEmpty()); + EXPECT_FALSE(set.IsWidthEmpty()); + EXPECT_FALSE(set.IsAspectRatioEmpty()); + + set = ResolutionSet::FromAspectRatio(1.0, HUGE_VAL); + EXPECT_TRUE(set.ContainsPoint(0, 0)); + EXPECT_TRUE(set.ContainsPoint(10, 10)); + EXPECT_TRUE(set.ContainsPoint(10, 20)); + EXPECT_TRUE(set.ContainsPoint(100, 100)); + EXPECT_TRUE(set.ContainsPoint(2000, 4000)); + EXPECT_TRUE(set.ContainsPoint(1, 50)); + EXPECT_FALSE(set.ContainsPoint(50, 1)); + EXPECT_FALSE(set.IsHeightEmpty()); + EXPECT_FALSE(set.IsWidthEmpty()); + EXPECT_FALSE(set.IsAspectRatioEmpty()); +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionTrivialEmptiness) { + ResolutionSet set = ResolutionSet::FromHeight(100, 10); + EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.IsHeightEmpty()); + EXPECT_FALSE(set.IsWidthEmpty()); + EXPECT_FALSE(set.IsAspectRatioEmpty()); + + set = ResolutionSet::FromWidth(100, 10); + EXPECT_TRUE(set.IsEmpty()); + EXPECT_FALSE(set.IsHeightEmpty()); + EXPECT_TRUE(set.IsWidthEmpty()); + EXPECT_FALSE(set.IsAspectRatioEmpty()); + + set = ResolutionSet::FromAspectRatio(100.0, 10.0); + EXPECT_TRUE(set.IsEmpty()); + EXPECT_FALSE(set.IsHeightEmpty()); + EXPECT_FALSE(set.IsWidthEmpty()); + EXPECT_TRUE(set.IsAspectRatioEmpty()); +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionLineConstraintsEmptiness) { + ResolutionSet set(1, 1, 1, 1, 1, 1); + EXPECT_FALSE(set.IsEmpty()); + EXPECT_FALSE(set.ContainsPoint(0, 0)); + EXPECT_TRUE(set.ContainsPoint(1, 1)); + EXPECT_FALSE(set.ContainsPoint(1, 0)); + EXPECT_FALSE(set.ContainsPoint(0, 1)); + + // Three lines that do not intersect in the same point is empty. + set = ResolutionSet(1, 1, 1, 1, 0.5, 0.5); + EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.IsAspectRatioEmpty()); + EXPECT_FALSE(set.ContainsPoint(0, 0)); + EXPECT_FALSE(set.ContainsPoint(1, 1)); + EXPECT_FALSE(set.ContainsPoint(1, 0)); + EXPECT_FALSE(set.ContainsPoint(0, 1)); +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionBoxEmptiness) { + int kMin = 100; + int kMax = 200; + // Max aspect ratio below box. + ResolutionSet set(kMin, kMax, kMin, kMax, 0.4, 0.4); + EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.IsAspectRatioEmpty()); + + // Min aspect ratio above box. + set = ResolutionSet(kMin, kMax, kMin, kMax, 3.0, HUGE_VAL); + EXPECT_TRUE(set.IsEmpty()); + EXPECT_TRUE(set.IsAspectRatioEmpty()); + + // Min aspect ratio crosses box. + set = ResolutionSet(kMin, kMax, kMin, kMax, 1.0, HUGE_VAL); + EXPECT_FALSE(set.IsEmpty()); + + // Max aspect ratio crosses box. + set = ResolutionSet(kMin, kMax, kMin, kMax, 0.0, 1.0); + EXPECT_FALSE(set.IsEmpty()); + + // Min and max aspect ratios cross box. + set = ResolutionSet(kMin, kMax, kMin, kMax, 0.9, 1.1); + EXPECT_FALSE(set.IsEmpty()); + + // Min and max aspect ratios cover box. + set = ResolutionSet(kMin, kMax, kMin, kMax, 0.2, 100); + EXPECT_FALSE(set.IsEmpty()); +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionPointIntersection) { + ResolutionSet set1(1, 2, 1, 2, 0.0, HUGE_VAL); + ResolutionSet set2 = ResolutionSet::FromExactAspectRatio(0.5); + auto intersection = set1.Intersection(set2); + + // The intersection should contain only the point (h=2, w=1) + EXPECT_TRUE(intersection.ContainsPoint(2, 1)); + + // It should not contain any point in the vicinity of the included point + // (integer version). + EXPECT_FALSE(intersection.ContainsPoint(1, 0)); + EXPECT_FALSE(intersection.ContainsPoint(2, 0)); + EXPECT_FALSE(intersection.ContainsPoint(3, 0)); + EXPECT_FALSE(intersection.ContainsPoint(1, 1)); + EXPECT_FALSE(intersection.ContainsPoint(3, 1)); + EXPECT_FALSE(intersection.ContainsPoint(1, 2)); + EXPECT_FALSE(intersection.ContainsPoint(2, 2)); + EXPECT_FALSE(intersection.ContainsPoint(3, 2)); + + // It should not contain any point in the vicinity of the included point + // (floating-point version). + EXPECT_FALSE(intersection.ContainsPoint(P(2.0001, 1.0001))); + EXPECT_FALSE(intersection.ContainsPoint(P(2.0001, 1.0))); + EXPECT_FALSE(intersection.ContainsPoint(P(2.0001, 0.9999))); + EXPECT_FALSE(intersection.ContainsPoint(P(2.0, 1.0001))); + EXPECT_FALSE(intersection.ContainsPoint(P(2.0, 0.9999))); + EXPECT_FALSE(intersection.ContainsPoint(P(1.9999, 1.0001))); + EXPECT_FALSE(intersection.ContainsPoint(P(1.9999, 1.0))); + EXPECT_FALSE(intersection.ContainsPoint(P(1.9999, 0.9999))); +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionLineIntersection) { + ResolutionSet set1(1, 2, 1, 2, 0.0, HUGE_VAL); + ResolutionSet set2 = ResolutionSet::FromExactAspectRatio(1.0); + + // The intersection should contain (1,1) and (2,2) + auto intersection = set1.Intersection(set2); + EXPECT_TRUE(intersection.ContainsPoint(1, 1)); + EXPECT_TRUE(intersection.ContainsPoint(2, 2)); + + // It should not contain the other points in the bounding box. + EXPECT_FALSE(intersection.ContainsPoint(1, 2)); + EXPECT_FALSE(intersection.ContainsPoint(2, 1)); +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionBoxIntersection) { + const int kMin1 = 0; + const int kMax1 = 2; + ResolutionSet set1(kMin1, kMax1, kMin1, kMax1, 0.0, HUGE_VAL); + + const int kMin2 = 1; + const int kMax2 = 3; + ResolutionSet set2(kMin2, kMax2, kMin2, kMax2, 0.0, HUGE_VAL); + + auto intersection = set1.Intersection(set2); + for (int i = kMin1; i <= kMax2; ++i) { + for (int j = kMin1; j <= kMax2; ++j) { + if (i >= kMin2 && j >= kMin2 && i <= kMax1 && j <= kMax1) + EXPECT_TRUE(intersection.ContainsPoint(i, j)); + else + EXPECT_FALSE(intersection.ContainsPoint(i, j)); + } + } +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionPointSetClosestPoint) { + const int kHeight = 10; + const int kWidth = 10; + const double kAspectRatio = 1.0; + ResolutionSet set(kHeight, kHeight, kWidth, kWidth, kAspectRatio, + kAspectRatio); + + for (int height = 0; height < 100; height += 10) { + for (int width = 0; width < 100; width += 10) { + EXPECT_EQ(P(kHeight, kWidth), set.ClosestPointTo(P(height, width))); + } + } +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionLineSetClosestPoint) { + { + const int kHeight = 10; + auto set = ResolutionSet::FromExactHeight(kHeight); + for (int height = 0; height < 100; height += 10) { + for (int width = 0; width < 100; width += 10) { + EXPECT_EQ(P(kHeight, width), set.ClosestPointTo(P(height, width))); + } + } + const int kWidth = 10; + set = ResolutionSet::FromExactWidth(kWidth); + for (int height = 0; height < 100; height += 10) { + for (int width = 0; width < 100; width += 10) { + EXPECT_EQ(P(height, kWidth), set.ClosestPointTo(P(height, width))); + } + } + } + + { + const double kAspectRatios[] = {0.0, 0.1, 0.2, 0.5, + 1.0, 2.0, 5.0, HUGE_VAL}; + for (double aspect_ratio : kAspectRatios) { + auto set = ResolutionSet::FromExactAspectRatio(aspect_ratio); + for (int height = 0; height < 100; height += 10) { + for (int width = 0; width < 100; width += 10) { + Point point(height, width); + Point expected = + ProjectionOnSegmentLine(point, P(0, 0), P(1, aspect_ratio)); + Point actual = set.ClosestPointTo(point); + // This requires higher tolerance than ExpectPointEx due to the larger + // error of the alternative projection method. + EXPECT_TRUE(expected.IsApproximatelyEqualTo(actual)); + } + } + } + } +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionGeneralSetClosestPoint) { + // This set contains the following vertices: + // (10, 10), (20, 10), (100, 50), (100, 100), (100/1.5, 100), (10, 15) + ResolutionSet set(10, 100, 10, 100, 0.5, 1.5); + + // Check that vertices are the closest points to themselves. + auto vertices = set.ComputeVertices(); + for (auto& vertex : vertices) + EXPECT_EQ(vertex, set.ClosestPointTo(vertex)); + + // Point inside the set. + EXPECT_EQ(P(11, 11), set.ClosestPointTo(P(11, 11))); + + // Close to horizontal segment (10, 10) (20, 10). + EXPECT_EQ(P(15, 10), set.ClosestPointTo(P(15, 9))); + + // Close to horizontal segment (100, 100) (100/1.5, 100). + EXPECT_EQ(P(99, 100), set.ClosestPointTo(P(99, 200))); + + // Close to vertical segment (10, 15) (10, 10). + EXPECT_EQ(P(10, 12.5), set.ClosestPointTo(P(2, 12.5))); + + // Close to vertical segment (100, 50) (100, 100). + EXPECT_EQ(P(100, 75), set.ClosestPointTo(P(120, 75))); + + // Close to oblique segment (20, 10) (100, 50) + { + Point point(70, 15); + Point expected = ProjectionOnSegmentLine(point, P(20, 10), P(100, 50)); + Point actual = set.ClosestPointTo(point); + EXPECT_POINT_EQ(expected, actual); + } + + // Close to oblique segment (100/1.5, 100) (10, 15) + { + Point point(12, 70); + Point expected = + ProjectionOnSegmentLine(point, P(100 / 1.5, 100), P(10, 15)); + Point actual = set.ClosestPointTo(point); + EXPECT_POINT_EQ(expected, actual); + } + + // Points close to vertices. + EXPECT_EQ(P(10, 10), set.ClosestPointTo(P(9, 9))); + EXPECT_EQ(P(20, 10), set.ClosestPointTo(P(20, 9))); + EXPECT_EQ(P(100, 50), set.ClosestPointTo(P(101, 50))); + EXPECT_EQ(P(100, 100), set.ClosestPointTo(P(101, 101))); + EXPECT_EQ(P(100 / 1.5, 100), set.ClosestPointTo(P(100 / 1.5, 101))); + EXPECT_EQ(P(10, 15), set.ClosestPointTo(P(9, 15))); +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionIdealIntersects) { + ResolutionSet set(100, 1000, 100, 1000, 0.5, 2.0); + + int kIdealHeight = 500; + int kIdealWidth = 1000; + double kIdealAspectRatio = 1.5; + + // Ideal height. + { + factory_.Reset(); + factory_.basic().height.setIdeal(kIdealHeight); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ( + Point(kIdealHeight, + kIdealHeight * MediaStreamVideoSource::kDefaultAspectRatio), + point); + } + + // Ideal width. + { + factory_.Reset(); + factory_.basic().width.setIdeal(kIdealWidth); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ( + Point(kIdealWidth / MediaStreamVideoSource::kDefaultAspectRatio, + kIdealWidth), + point); + } + + // Ideal aspect ratio. + { + factory_.Reset(); + factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_DOUBLE_EQ(MediaStreamVideoSource::kDefaultHeight, point.height()); + EXPECT_DOUBLE_EQ(MediaStreamVideoSource::kDefaultHeight * kIdealAspectRatio, + point.width()); + } + + // Ideal height and width. + { + factory_.Reset(); + factory_.basic().height.setIdeal(kIdealHeight); + factory_.basic().width.setIdeal(kIdealWidth); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ(Point(kIdealHeight, kIdealWidth), point); + } + + // Ideal height and aspect-ratio. + { + factory_.Reset(); + factory_.basic().height.setIdeal(kIdealHeight); + factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ(Point(kIdealHeight, kIdealHeight * kIdealAspectRatio), + point); + } + + // Ideal width and aspect-ratio. + { + factory_.Reset(); + factory_.basic().width.setIdeal(kIdealWidth); + factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ(Point(kIdealWidth / kIdealAspectRatio, kIdealWidth), point); + } + + // Ideal height, width and aspect-ratio. + { + factory_.Reset(); + factory_.basic().height.setIdeal(kIdealHeight); + factory_.basic().width.setIdeal(kIdealWidth); + factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + // Ideal aspect ratio should be ignored. + EXPECT_POINT_EQ(Point(kIdealHeight, kIdealWidth), point); + } +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionIdealOutsideSinglePoint) { + // This set is a triangle with vertices (100,100), (1000,100) and (1000,1000). + ResolutionSet set(100, 1000, 100, 1000, 0.0, 1.0); + + int kIdealHeight = 50; + int kIdealWidth = 1100; + double kIdealAspectRatio = 0.09; + Point kVertex1(100, 100); + Point kVertex2(1000, 100); + Point kVertex3(1000, 1000); + + // Ideal height. + { + factory_.Reset(); + factory_.basic().height.setIdeal(kIdealHeight); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ(kVertex1, point); + } + + // Ideal width. + { + factory_.Reset(); + factory_.basic().width.setIdeal(kIdealWidth); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ(kVertex3, point); + } + + // Ideal aspect ratio. + { + factory_.Reset(); + factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ(kVertex2, point); + } + + // Ideal height and width. + { + factory_.Reset(); + factory_.basic().height.setIdeal(kIdealHeight); + factory_.basic().width.setIdeal(kIdealWidth); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + Point expected = set.ClosestPointTo(Point(kIdealHeight, kIdealWidth)); + EXPECT_POINT_EQ(expected, point); + } + + // Ideal height and aspect-ratio. + { + factory_.Reset(); + factory_.basic().height.setIdeal(kIdealHeight); + factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + Point expected = set.ClosestPointTo( + Point(kIdealHeight, kIdealHeight * kIdealAspectRatio)); + EXPECT_POINT_EQ(expected, point); + } + + // Ideal width and aspect-ratio. + { + factory_.Reset(); + factory_.basic().width.setIdeal(kIdealWidth); + factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + Point expected = + set.ClosestPointTo(Point(kIdealWidth / kIdealAspectRatio, kIdealWidth)); + EXPECT_POINT_EQ(expected, point); + } + + // Ideal height, width and aspect-ratio. + { + factory_.Reset(); + factory_.basic().height.setIdeal(kIdealHeight); + factory_.basic().width.setIdeal(kIdealWidth); + factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + // kIdealAspectRatio is ignored if all three ideals are given. + Point expected = set.ClosestPointTo(Point(kIdealHeight, kIdealWidth)); + EXPECT_POINT_EQ(expected, point); + } +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, + ResolutionIdealOutsideMultiplePoints) { + // This set is a triangle with vertices (100,100), (1000,100) and (1000,1000). + ResolutionSet set(100, 1000, 100, 1000, 0.0, 1.0); + + int kIdealHeight = 1100; + int kIdealWidth = 50; + double kIdealAspectRatio = 11.0; + Point kVertex1(100, 100); + Point kVertex2(1000, 100); + Point kVertex3(1000, 1000); + + // Ideal height. + { + factory_.Reset(); + factory_.basic().height.setIdeal(kIdealHeight); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + // Parallel to the side between kVertex2 and kVertex3. Point closest to + // default aspect ratio is kVertex3. + EXPECT_POINT_EQ(kVertex3, point); + } + + // Ideal width. + { + factory_.Reset(); + factory_.basic().width.setIdeal(kIdealWidth); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + // Parallel to the side between kVertex1 and kVertex2. Point closest to + // default aspect ratio is kVertex1. + EXPECT_POINT_EQ(kVertex1, point); + } + + // Ideal aspect ratio. + { + factory_.Reset(); + factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + // The side between kVertex1 and kVertex3 is closest. The points closest to + // default dimensions are (kDefaultHeight, kDefaultHeight * AR) + // and (kDefaultWidth / AR, kDefaultWidth). Since the aspect ratio of the + // polygon side is less than the default, the algorithm preserves the + // default width. + Point expected( + MediaStreamVideoSource::kDefaultWidth / kVertex1.AspectRatio(), + MediaStreamVideoSource::kDefaultWidth); + EXPECT_POINT_EQ(expected, point); + EXPECT_TRUE(set.ContainsPoint(expected)); + } +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, + ResolutionUnconstrainedExtremeIdeal) { + ResolutionSet set; + + // Ideal height. + { + factory_.Reset(); + factory_.basic().height.setIdeal(std::numeric_limits<long>::max()); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ( + Point(ResolutionSet::kMaxDimension, ResolutionSet::kMaxDimension), + point); + factory_.basic().height.setIdeal(0); + point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ(Point(0, 0), point); + } + + // Ideal width. + { + factory_.Reset(); + factory_.basic().width.setIdeal(std::numeric_limits<long>::max()); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ(Point(ResolutionSet::kMaxDimension / + MediaStreamVideoSource::kDefaultAspectRatio, + ResolutionSet::kMaxDimension), + point); + factory_.basic().width.setIdeal(0); + point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ(Point(0, 0), point); + } + + // Ideal Aspect Ratio. + { + factory_.Reset(); + factory_.basic().aspectRatio.setIdeal(HUGE_VAL); + Point point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ(Point(0, ResolutionSet::kMaxDimension), point); + factory_.basic().aspectRatio.setIdeal(0.0); + point = set.SelectClosestPointToIdeal( + factory_.CreateWebMediaConstraints().basic()); + EXPECT_POINT_EQ(Point(ResolutionSet::kMaxDimension, 0), point); + } +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, ResolutionVertices) { + // Empty set. + { + ResolutionSet set(1000, 100, 1000, 100, 0.5, 1.5); + ASSERT_TRUE(set.IsEmpty()); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(0U, vertices.size()); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // Three lines that intersect at the same point. + { + ResolutionSet set(1, 1, 1, 1, 1, 1); + EXPECT_FALSE(set.IsEmpty()); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(1U, vertices.size()); + VerticesContain(vertices, Point(1, 1)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // A line segment with the lower-left and upper-right corner of the box. + { + ResolutionSet set(0, 100, 0, 100, 1.0, 1.0); + EXPECT_FALSE(set.IsEmpty()); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(2U, vertices.size()); + VerticesContain(vertices, Point(0, 0)); + VerticesContain(vertices, Point(100, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + + set = ResolutionSet(0, 100, 0, 100, 1.0, HUGE_VAL); + EXPECT_FALSE(set.IsEmpty()); + vertices = set.ComputeVertices(); + EXPECT_EQ(3U, vertices.size()); + VerticesContain(vertices, Point(0, 0)); + VerticesContain(vertices, Point(100, 100)); + VerticesContain(vertices, Point(0, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + + set = ResolutionSet(0, 100, 0, 100, 0, 1.0); + EXPECT_FALSE(set.IsEmpty()); + vertices = set.ComputeVertices(); + EXPECT_EQ(3U, vertices.size()); + VerticesContain(vertices, Point(0, 0)); + VerticesContain(vertices, Point(100, 100)); + VerticesContain(vertices, Point(100, 0)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // A line segment that crosses the bottom and right sides of the box. + { + const double kAspectRatio = 50.0 / 75.0; + ResolutionSet set(50, 100, 50, 100, kAspectRatio, kAspectRatio); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(2U, vertices.size()); + VerticesContain(vertices, Point(50 / kAspectRatio, 50)); + VerticesContain(vertices, Point(100, 100.0 * kAspectRatio)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + + set = ResolutionSet(50, 100, 50, 100, kAspectRatio, HUGE_VAL); + vertices = set.ComputeVertices(); + EXPECT_EQ(5U, vertices.size()); + VerticesContain(vertices, Point(50 / kAspectRatio, 50)); + VerticesContain(vertices, Point(100, 100.0 * kAspectRatio)); + VerticesContain(vertices, Point(50, 50)); + VerticesContain(vertices, Point(50, 100)); + VerticesContain(vertices, Point(100, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + + set = ResolutionSet(50, 100, 50, 100, 0.0, kAspectRatio); + vertices = set.ComputeVertices(); + EXPECT_EQ(3U, vertices.size()); + VerticesContain(vertices, Point(50 / kAspectRatio, 50)); + VerticesContain(vertices, Point(100, 100.0 * kAspectRatio)); + VerticesContain(vertices, Point(100, 50)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // A line segment that crosses the left and top sides of the box. + { + const double kAspectRatio = 75.0 / 50.0; + ResolutionSet set(50, 100, 50, 100, kAspectRatio, kAspectRatio); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(2U, vertices.size()); + VerticesContain(vertices, Point(50, 50 * kAspectRatio)); + VerticesContain(vertices, Point(100 / kAspectRatio, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + + set = ResolutionSet(50, 100, 50, 100, kAspectRatio, HUGE_VAL); + vertices = set.ComputeVertices(); + EXPECT_EQ(3U, vertices.size()); + VerticesContain(vertices, Point(50, 50 * kAspectRatio)); + VerticesContain(vertices, Point(100 / kAspectRatio, 100)); + VerticesContain(vertices, Point(50, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + + set = ResolutionSet(50, 100, 50, 100, 0.0, kAspectRatio); + vertices = set.ComputeVertices(); + EXPECT_EQ(5U, vertices.size()); + VerticesContain(vertices, Point(50, 50 * kAspectRatio)); + VerticesContain(vertices, Point(100 / kAspectRatio, 100)); + VerticesContain(vertices, Point(50, 50)); + VerticesContain(vertices, Point(100, 100)); + VerticesContain(vertices, Point(100, 50)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // An aspect ratio constraint crosses the bottom and top sides of the box. + { + const double kAspectRatio = 75.0 / 50.0; + ResolutionSet set(0, 100, 50, 100, kAspectRatio, kAspectRatio); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(2U, vertices.size()); + VerticesContain(vertices, Point(50 / kAspectRatio, 50)); + VerticesContain(vertices, Point(100 / kAspectRatio, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + + set = ResolutionSet(0, 100, 50, 100, kAspectRatio, HUGE_VAL); + vertices = set.ComputeVertices(); + EXPECT_EQ(4U, vertices.size()); + VerticesContain(vertices, Point(50 / kAspectRatio, 50)); + VerticesContain(vertices, Point(100 / kAspectRatio, 100)); + VerticesContain(vertices, Point(0, 50)); + VerticesContain(vertices, Point(0, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + + set = ResolutionSet(0, 100, 50, 100, 0.0, kAspectRatio); + vertices = set.ComputeVertices(); + EXPECT_EQ(4U, vertices.size()); + VerticesContain(vertices, Point(50 / kAspectRatio, 50)); + VerticesContain(vertices, Point(100 / kAspectRatio, 100)); + VerticesContain(vertices, Point(100, 50)); + VerticesContain(vertices, Point(100, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // An aspect-ratio constraint crosses the left and right sides of the box. + { + const double kAspectRatio = 75.0 / 50.0; + ResolutionSet set(50, 100, 0, 200, kAspectRatio, kAspectRatio); + auto vertices = set.ComputeVertices(); + // This one fails if floating-point precision is too high. + EXPECT_EQ(2U, vertices.size()); + VerticesContain(vertices, Point(50, 50 * kAspectRatio)); + VerticesContain(vertices, Point(100, 100 * kAspectRatio)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + + set = ResolutionSet(50, 100, 0, 200, kAspectRatio, HUGE_VAL); + vertices = set.ComputeVertices(); + // This one fails if floating-point precision is too high. + EXPECT_EQ(4U, vertices.size()); + VerticesContain(vertices, Point(50, 50 * kAspectRatio)); + VerticesContain(vertices, Point(100, 100 * kAspectRatio)); + VerticesContain(vertices, Point(50, 200)); + VerticesContain(vertices, Point(100, 200)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + + set = ResolutionSet(50, 100, 0, 200, 0.0, kAspectRatio); + vertices = set.ComputeVertices(); + EXPECT_EQ(4U, vertices.size()); + VerticesContain(vertices, Point(50, 50 * kAspectRatio)); + VerticesContain(vertices, Point(100, 100 * kAspectRatio)); + VerticesContain(vertices, Point(50, 0)); + VerticesContain(vertices, Point(100, 0)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // Aspect-ratio lines touch the corners of the box. + { + ResolutionSet set(50, 100, 50, 100, 0.5, 2.0); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(4U, vertices.size()); + VerticesContain(vertices, Point(50, 50)); + VerticesContain(vertices, Point(100, 50)); + VerticesContain(vertices, Point(50, 100)); + VerticesContain(vertices, Point(100, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // Hexagons. + { + ResolutionSet set(10, 100, 10, 100, 0.5, 1.5); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(6U, vertices.size()); + VerticesContain(vertices, Point(10, 10)); + VerticesContain(vertices, Point(100, 100)); + VerticesContain(vertices, Point(10, 10 * 1.5)); + VerticesContain(vertices, Point(100 / 1.5, 100)); + VerticesContain(vertices, Point(10 / 0.5, 10)); + VerticesContain(vertices, Point(100, 100 * 0.5)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + + set = ResolutionSet(50, 100, 50, 100, 50.0 / 75.0, 75.0 / 50.0); + vertices = set.ComputeVertices(); + EXPECT_EQ(6U, vertices.size()); + VerticesContain(vertices, Point(50, 50)); + VerticesContain(vertices, Point(100, 100)); + VerticesContain(vertices, Point(75, 50)); + VerticesContain(vertices, Point(50, 75)); + VerticesContain(vertices, Point(100, 100.0 * 50.0 / 75.0)); + VerticesContain(vertices, Point(100 * 50.0 / 75.0, 100.0)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // Both aspect-ratio constraints cross the left and top sides of the box. + { + ResolutionSet set(10, 100, 10, 100, 1.5, 1.7); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(4U, vertices.size()); + VerticesContain(vertices, Point(10, 10 * 1.5)); + VerticesContain(vertices, Point(10, 10 * 1.7)); + VerticesContain(vertices, Point(100 / 1.5, 100)); + VerticesContain(vertices, Point(100 / 1.7, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // Both aspect-ratio constraints cross the left and right sides of the box. + { + ResolutionSet set(10, 100, 10, ResolutionSet::kMaxDimension, 1.5, 1.7); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(4U, vertices.size()); + VerticesContain(vertices, Point(10, 10 * 1.5)); + VerticesContain(vertices, Point(10, 10 * 1.7)); + VerticesContain(vertices, Point(100, 100 * 1.5)); + VerticesContain(vertices, Point(100, 100 * 1.7)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // Both aspect-ratio constraints cross the bottom and top sides of the box. + { + ResolutionSet set(10, 100, 50, 100, 2.0, 4.0); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(4U, vertices.size()); + VerticesContain(vertices, Point(50 / 2.0, 50)); + VerticesContain(vertices, Point(100 / 2.0, 100)); + VerticesContain(vertices, Point(50 / 4.0, 50)); + VerticesContain(vertices, Point(100 / 4.0, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // Both aspect-ratio constraints cross the bottom and right sides of the box. + { + ResolutionSet set(10, 100, 50, 100, 0.7, 0.9); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(4U, vertices.size()); + VerticesContain(vertices, Point(50 / 0.7, 50)); + VerticesContain(vertices, Point(50 / 0.9, 50)); + VerticesContain(vertices, Point(100, 100 * 0.7)); + VerticesContain(vertices, Point(100, 100 * 0.9)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // Pentagons. + { + ResolutionSet set(10, 100, 50, 100, 0.7, 4.0); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(5U, vertices.size()); + VerticesContain(vertices, Point(50 / 0.7, 50)); + VerticesContain(vertices, Point(100, 100 * 0.7)); + VerticesContain(vertices, Point(50 / 4.0, 50)); + VerticesContain(vertices, Point(100 / 4.0, 100)); + VerticesContain(vertices, Point(100, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + + set = ResolutionSet(50, 100, 10, 100, 0.7, 1.5); + vertices = set.ComputeVertices(); + EXPECT_EQ(5U, vertices.size()); + VerticesContain(vertices, Point(50, 50 * 0.7)); + VerticesContain(vertices, Point(100, 100 * 0.7)); + VerticesContain(vertices, Point(50, 50 * 1.5)); + VerticesContain(vertices, Point(100 / 1.5, 100)); + VerticesContain(vertices, Point(100, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } + + // Extreme aspect ratios, for completeness. + { + ResolutionSet set(0, 100, 0, ResolutionSet::kMaxDimension, 0.0, 0.0); + auto vertices = set.ComputeVertices(); + EXPECT_EQ(2U, vertices.size()); + VerticesContain(vertices, Point(0, 0)); + VerticesContain(vertices, Point(100, 0)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + + set = ResolutionSet(0, ResolutionSet::kMaxDimension, 0, 100, HUGE_VAL, + HUGE_VAL); + vertices = set.ComputeVertices(); + EXPECT_EQ(2U, vertices.size()); + VerticesContain(vertices, Point(0, 0)); + VerticesContain(vertices, Point(0, 100)); + EXPECT_TRUE(AreValidVertices(set, vertices)); + } +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, NumericRangeSetDouble) { + using DoubleRangeSet = NumericRangeSet<double>; + // Set with maximum supported range. + DoubleRangeSet set; + EXPECT_EQ(0.0, set.Min()); + EXPECT_EQ(HUGE_VAL, set.Max()); + EXPECT_FALSE(set.IsEmpty()); + + // Constrained set. + const double kMin = 1.0; + const double kMax = 10.0; + set = DoubleRangeSet(kMin, kMax); + EXPECT_EQ(kMin, set.Min()); + EXPECT_EQ(kMax, set.Max()); + EXPECT_FALSE(set.IsEmpty()); + + // Empty set. + set = DoubleRangeSet(kMax, kMin); + EXPECT_TRUE(set.IsEmpty()); + + // Intersection. + set = DoubleRangeSet(kMin, kMax); + const double kMin2 = 5.0; + const double kMax2 = 20.0; + auto intersection = set.Intersection(DoubleRangeSet(kMin2, kMax2)); + EXPECT_EQ(kMin2, intersection.Min()); + EXPECT_EQ(kMax, intersection.Max()); + EXPECT_FALSE(intersection.IsEmpty()); + + // Empty intersection. + intersection = set.Intersection(DoubleRangeSet(kMax + 1, HUGE_VAL)); + EXPECT_TRUE(intersection.IsEmpty()); +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, DiscreteSetString) { + // Universal set. + using StringSet = DiscreteSet<std::string>; + StringSet set = StringSet::UniversalSet(); + EXPECT_TRUE(set.Contains("arbitrary")); + EXPECT_TRUE(set.Contains("strings")); + EXPECT_FALSE(set.IsEmpty()); + EXPECT_TRUE(set.is_universal()); + EXPECT_FALSE(set.HasExplicitElements()); + + // Constrained set. + set = StringSet(std::vector<std::string>({"a", "b", "c"})); + EXPECT_TRUE(set.Contains("a")); + EXPECT_TRUE(set.Contains("b")); + EXPECT_TRUE(set.Contains("c")); + EXPECT_FALSE(set.Contains("d")); + EXPECT_FALSE(set.IsEmpty()); + EXPECT_FALSE(set.is_universal()); + EXPECT_TRUE(set.HasExplicitElements()); + EXPECT_EQ(std::string("a"), set.FirstElement()); + + // Empty set. + set = StringSet::EmptySet(); + EXPECT_FALSE(set.Contains("a")); + EXPECT_FALSE(set.Contains("b")); + EXPECT_TRUE(set.IsEmpty()); + EXPECT_FALSE(set.is_universal()); + EXPECT_FALSE(set.HasExplicitElements()); + + // Intersection. + set = StringSet(std::vector<std::string>({"a", "b", "c"})); + StringSet set2 = StringSet(std::vector<std::string>({"b", "c", "d"})); + auto intersection = set.Intersection(set2); + EXPECT_FALSE(intersection.Contains("a")); + EXPECT_TRUE(intersection.Contains("b")); + EXPECT_TRUE(intersection.Contains("c")); + EXPECT_FALSE(intersection.Contains("d")); + EXPECT_FALSE(intersection.IsEmpty()); + EXPECT_FALSE(intersection.is_universal()); + EXPECT_TRUE(intersection.HasExplicitElements()); + EXPECT_EQ(std::string("b"), intersection.FirstElement()); + + // Empty intersection. + set2 = StringSet(std::vector<std::string>({"d", "e", "f"})); + intersection = set.Intersection(set2); + EXPECT_FALSE(intersection.Contains("a")); + EXPECT_FALSE(intersection.Contains("b")); + EXPECT_FALSE(intersection.Contains("c")); + EXPECT_FALSE(intersection.Contains("d")); + EXPECT_TRUE(intersection.IsEmpty()); + EXPECT_FALSE(intersection.is_universal()); + EXPECT_FALSE(intersection.HasExplicitElements()); +} + +TEST_F(MediaStreamConstraintsUtilSetsTest, DiscreteSetBool) { + using BoolSet = DiscreteSet<bool>; + // Universal set. + BoolSet set = BoolSet::UniversalSet(); + EXPECT_TRUE(set.Contains(true)); + EXPECT_TRUE(set.Contains(false)); + EXPECT_FALSE(set.IsEmpty()); + EXPECT_TRUE(set.is_universal()); + EXPECT_FALSE(set.HasExplicitElements()); + + // Constrained set. + set = BoolSet({true}); + EXPECT_TRUE(set.Contains(true)); + EXPECT_FALSE(set.Contains(false)); + EXPECT_FALSE(set.IsEmpty()); + EXPECT_FALSE(set.is_universal()); + EXPECT_TRUE(set.HasExplicitElements()); + EXPECT_TRUE(set.FirstElement()); + + set = BoolSet({false}); + EXPECT_FALSE(set.Contains(true)); + EXPECT_TRUE(set.Contains(false)); + EXPECT_FALSE(set.IsEmpty()); + EXPECT_FALSE(set.is_universal()); + EXPECT_TRUE(set.HasExplicitElements()); + EXPECT_FALSE(set.FirstElement()); + + // Empty set. + set = BoolSet::EmptySet(); + EXPECT_FALSE(set.Contains(true)); + EXPECT_FALSE(set.Contains(false)); + EXPECT_TRUE(set.IsEmpty()); + EXPECT_FALSE(set.is_universal()); + EXPECT_FALSE(set.HasExplicitElements()); + + // Intersection. + set = BoolSet::UniversalSet(); + auto intersection = set.Intersection(BoolSet({true})); + EXPECT_TRUE(intersection.Contains(true)); + EXPECT_FALSE(intersection.Contains(false)); + intersection = set.Intersection(set); + EXPECT_TRUE(intersection.Contains(true)); + EXPECT_TRUE(intersection.Contains(true)); + + // Empty intersection. + set = BoolSet({true}); + intersection = set.Intersection(BoolSet({false})); + EXPECT_TRUE(intersection.IsEmpty()); +} + +} // namespace content
diff --git a/content/renderer/media/media_stream_video_source.h b/content/renderer/media/media_stream_video_source.h index 666aced7..031f9f0 100644 --- a/content/renderer/media/media_stream_video_source.h +++ b/content/renderer/media/media_stream_video_source.h
@@ -57,6 +57,9 @@ kUnknownFrameRate = 0, }; + static constexpr double kDefaultAspectRatio = + static_cast<double>(kDefaultWidth) / static_cast<double>(kDefaultHeight); + MediaStreamVideoSource(); ~MediaStreamVideoSource() override;
diff --git a/content/renderer/media_recorder/video_track_recorder.cc b/content/renderer/media_recorder/video_track_recorder.cc index 9ca982ed..3b1b0a5 100644 --- a/content/renderer/media_recorder/video_track_recorder.cc +++ b/content/renderer/media_recorder/video_track_recorder.cc
@@ -452,6 +452,8 @@ void ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size); + void DestroyOnEncodingTaskRunner(base::WaitableEvent* async_waiter); + media::GpuVideoAcceleratorFactories* const gpu_factories_; const media::VideoCodecProfile codec_; @@ -615,9 +617,20 @@ } VEAEncoder::~VEAEncoder() { + base::WaitableEvent release_waiter( + base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::NOT_SIGNALED); + // base::Unretained is safe because the class will be alive until + // |release_waiter| is signaled. + // TODO(emircan): Consider refactoring media::VideoEncodeAccelerator to avoid + // using naked pointers and using DeleteSoon() here, see + // http://crbug.com/701627. + // It is currently unsafe because |video_encoder_| might be in use on another + // function on |encoding_task_runner_|, see http://crbug.com/701030. encoding_task_runner_->PostTask( - FROM_HERE, base::Bind(&media::VideoEncodeAccelerator::Destroy, - base::Unretained(video_encoder_.release()))); + FROM_HERE, base::Bind(&VEAEncoder::DestroyOnEncodingTaskRunner, + base::Unretained(this), &release_waiter)); + release_waiter.Wait(); } void VEAEncoder::RequireBitstreamBuffers(unsigned int /*input_count*/, @@ -772,10 +785,7 @@ frames_in_encode_.push(std::make_pair( media::WebmMuxer::VideoParameters(frame), capture_timestamp)); - encoding_task_runner_->PostTask( - FROM_HERE, - base::Bind(&media::VideoEncodeAccelerator::Encode, - base::Unretained(video_encoder_.get()), video_frame, false)); + video_encoder_->Encode(video_frame, false); } void VEAEncoder::ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) { @@ -793,6 +803,13 @@ } } +void VEAEncoder::DestroyOnEncodingTaskRunner( + base::WaitableEvent* async_waiter) { + DCHECK(encoding_task_runner_->BelongsToCurrentThread()); + video_encoder_.reset(); + async_waiter->Signal(); +} + // static void VpxEncoder::ShutdownEncoder(std::unique_ptr<base::Thread> encoding_thread, ScopedVpxCodecCtxPtr encoder) {
diff --git a/content/renderer/pepper/message_channel.cc b/content/renderer/pepper/message_channel.cc index 4566631..9ad6b48c6 100644 --- a/content/renderer/pepper/message_channel.cc +++ b/content/renderer/pepper/message_channel.cc
@@ -102,7 +102,8 @@ } void MessageChannel::PostMessageToJavaScript(PP_Var message_data) { - v8::HandleScope scope(v8::Isolate::GetCurrent()); + v8::Isolate* isolate = instance_->GetIsolate(); + v8::HandleScope scope(isolate); // Because V8 is probably not on the stack for Native->JS calls, we need to // enter the appropriate context for the plugin. @@ -122,7 +123,7 @@ } WebSerializedScriptValue serialized_val = - WebSerializedScriptValue::serialize(v8_val); + WebSerializedScriptValue::serialize(isolate, v8_val); if (js_message_queue_state_ != SEND_DIRECTLY) { // We can't just PostTask here; the messages would arrive out of
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 6a3f713f..2a4a29a 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -2248,7 +2248,8 @@ WebSerializedScriptValue serialized_script_value; if (params.is_data_raw_string) { - v8::HandleScope handle_scope(blink::mainThreadIsolate()); + v8::Isolate* isolate = blink::mainThreadIsolate(); + v8::HandleScope handle_scope(isolate); v8::Local<v8::Context> context = frame_->mainWorldScriptContext(); v8::Context::Scope context_scope(context); V8ValueConverterImpl converter; @@ -2257,7 +2258,8 @@ std::unique_ptr<base::Value> value(new base::Value(params.data)); v8::Local<v8::Value> result_value = converter.ToV8Value(value.get(), context); - serialized_script_value = WebSerializedScriptValue::serialize(result_value); + serialized_script_value = + WebSerializedScriptValue::serialize(isolate, result_value); } else { serialized_script_value = WebSerializedScriptValue::fromString(WebString::fromUTF16(params.data));
diff --git a/content/shell/browser/layout_test/layout_test_bluetooth_chooser_factory.cc b/content/shell/browser/layout_test/layout_test_bluetooth_chooser_factory.cc index 9367ee9b..a8f893e 100644 --- a/content/shell/browser/layout_test/layout_test_bluetooth_chooser_factory.cc +++ b/content/shell/browser/layout_test/layout_test_bluetooth_chooser_factory.cc
@@ -75,14 +75,6 @@ factory_->events_.push_back(event); } - void RemoveDevice(const std::string& device_id) override { - CheckFactory(); - std::string event = "remove-device("; - event += device_id; - event += ")"; - factory_->events_.push_back(event); - } - EventHandler event_handler; private:
diff --git a/content/shell/browser/layout_test/layout_test_first_device_bluetooth_chooser.h b/content/shell/browser/layout_test/layout_test_first_device_bluetooth_chooser.h index ae5cd83..9f888f5f 100644 --- a/content/shell/browser/layout_test/layout_test_first_device_bluetooth_chooser.h +++ b/content/shell/browser/layout_test/layout_test_first_device_bluetooth_chooser.h
@@ -32,7 +32,6 @@ bool is_gatt_connected, bool is_paired, int signal_strength_level) override; - void RemoveDevice(const std::string& device_id) override {} private: EventHandler event_handler_;
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index b5c8762..1b58cf93 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -1585,6 +1585,7 @@ "../renderer/media/media_devices_event_dispatcher_unittest.cc", "../renderer/media/media_stream_audio_processor_unittest.cc", "../renderer/media/media_stream_audio_unittest.cc", + "../renderer/media/media_stream_constraints_util_sets_unittest.cc", "../renderer/media/media_stream_constraints_util_unittest.cc", "../renderer/media/media_stream_constraints_util_video_device_unittest.cc", "../renderer/media/media_stream_dispatcher_unittest.cc",
diff --git a/content/test/gpu/generate_buildbot_json.py b/content/test/gpu/generate_buildbot_json.py index 284c90d..7205ee1 100755 --- a/content/test/gpu/generate_buildbot_json.py +++ b/content/test/gpu/generate_buildbot_json.py
@@ -2130,7 +2130,7 @@ { 'cipd_package': 'infra/tools/luci/logdog/butler/${platform}', 'location': 'bin', - 'revision': 'git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58' + 'revision': 'git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c' } ], 'output_links': [
diff --git a/extensions/BUILD.gn b/extensions/BUILD.gn index db02ee84..4e85c5b 100644 --- a/extensions/BUILD.gn +++ b/extensions/BUILD.gn
@@ -56,6 +56,8 @@ "//extensions/common:mojo__generator", "//extensions/common/api:mojom__generator", "//mojo/common:common_custom_types__generator", + "//net/interfaces:interfaces__generator", + "//url/mojo:url_mojom_gurl__generator", "//url/mojo:url_mojom_origin__generator", ] }
diff --git a/extensions/renderer/dispatcher.cc b/extensions/renderer/dispatcher.cc index 63e872a..51f56f64 100644 --- a/extensions/renderer/dispatcher.cc +++ b/extensions/renderer/dispatcher.cc
@@ -744,9 +744,11 @@ #if defined(ENABLE_MEDIA_ROUTER) {"chrome/browser/media/router/mojo/media_router.mojom", IDR_MEDIA_ROUTER_MOJOM_JS}, - {"mojo/common/time.mojom", IDR_MOJO_TIME_MOJOM_JS}, - {"url/mojo/origin.mojom", IDR_ORIGIN_MOJOM_JS}, {"media_router_bindings", IDR_MEDIA_ROUTER_BINDINGS_JS}, + {"mojo/common/time.mojom", IDR_MOJO_TIME_MOJOM_JS}, + {"net/interfaces/ip_address.mojom", IDR_MOJO_IP_ADDRESS_MOJOM_JS}, + {"url/mojo/origin.mojom", IDR_ORIGIN_MOJOM_JS}, + {"url/mojo/url.mojom", IDR_MOJO_URL_MOJOM_JS}, #endif // defined(ENABLE_MEDIA_ROUTER) };
diff --git a/extensions/renderer/resources/extensions_renderer_resources.grd b/extensions/renderer/resources/extensions_renderer_resources.grd index 984f61e..5fb2a85 100644 --- a/extensions/renderer/resources/extensions_renderer_resources.grd +++ b/extensions/renderer/resources/extensions_renderer_resources.grd
@@ -89,7 +89,9 @@ <include name="IDR_MEDIA_ROUTER_MOJOM_JS" file="${mojom_root}\chrome\browser\media\router\mojo\media_router.mojom.js" use_base_dir="false" type="BINDATA" /> <include name="IDR_MEDIA_ROUTER_BINDINGS_JS" file="media_router_bindings.js" type="BINDATA" /> <include name="IDR_MOJO_TIME_MOJOM_JS" file="${mojom_root}\mojo\common\time.mojom.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_MOJO_IP_ADDRESS_MOJOM_JS" file="${mojom_root}\net\interfaces\ip_address.mojom.js" use_base_dir="false" type="BINDATA" /> <include name="IDR_ORIGIN_MOJOM_JS" file="${mojom_root}\url\mojo\origin.mojom.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_MOJO_URL_MOJOM_JS" file="${mojom_root}\url\mojo\url.mojom.js" use_base_dir="false" type="BINDATA" /> </if> </includes> <structures>
diff --git a/extensions/renderer/utils_native_handler.cc b/extensions/renderer/utils_native_handler.cc index 741a111..a33c54d 100644 --- a/extensions/renderer/utils_native_handler.cc +++ b/extensions/renderer/utils_native_handler.cc
@@ -21,9 +21,11 @@ void UtilsNativeHandler::DeepCopy( const v8::FunctionCallbackInfo<v8::Value>& args) { + v8::Isolate* isolate = args.GetIsolate(); CHECK_EQ(1, args.Length()); args.GetReturnValue().Set( - blink::WebSerializedScriptValue::serialize(args[0]).deserialize()); + blink::WebSerializedScriptValue::serialize(isolate, args[0]) + .deserialize(isolate)); } } // namespace extensions
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index 74ce181..c5b55c3 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -546,6 +546,9 @@ <message name="IDS_IOS_CONTENT_SUGGESTIONS_DELETE" desc="The name of the Delete command in the Content Suggestions articles context menu"> Delete </message> + <message name="IDS_IOS_CONTENT_SUGGESTIONS_FOOTER_TITLE" desc="The title of the footer of the sections of Content Suggestions"> + More + </message> <message name="IDS_IOS_CONTENT_SETTINGS_TITLE" desc="Title for content settings dialog [Length: 29em] [iOS only]"> Content Settings </message>
diff --git a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm index 0ef1796f..c3b1bc1 100644 --- a/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm +++ b/ios/chrome/browser/content_suggestions/content_suggestions_mediator.mm
@@ -17,6 +17,8 @@ #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_data_sink.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_image_fetcher.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_section_information.h" +#include "ios/chrome/grit/ios_strings.h" +#include "ui/base/l10n/l10n_util_mac.h" #include "ui/gfx/image/image.h" #if !defined(__has_feature) || !__has_feature(objc_arc) @@ -98,6 +100,10 @@ // TODO(crbug.com/686728): Creates an item to display information when the // section is empty. } + if (categoryInfo->has_fetch_action()) { + sectionInfo.footerTitle = + l10n_util::GetNSString(IDS_IOS_CONTENT_SUGGESTIONS_FOOTER_TITLE); + } sectionInfo.title = base::SysUTF16ToNSString(categoryInfo->title()); } return sectionInfo;
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm index 83866cc..ee0f2048 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm
@@ -16,6 +16,7 @@ #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_data_source.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_expandable_item.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_favicon_item.h" +#import "ios/chrome/browser/ui/content_suggestions/content_suggestions_footer_item.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_image_fetcher.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_section_information.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_stack_item.h" @@ -37,6 +38,7 @@ ItemTypeExpand, ItemTypeStack, ItemTypeFavicon, + ItemTypeFooter, }; typedef NS_ENUM(NSInteger, SectionIdentifier) { @@ -244,6 +246,8 @@ [model addSectionWithIdentifier:sectionIdentifier]; self.sectionInfoBySectionIdentifier[@(sectionIdentifier)] = sectionInfo; [indexSet addIndex:[model sectionForSectionIdentifier:sectionIdentifier]]; + + [self addFooterIfNeeded:suggestion.suggestionIdentifier.sectionInfo]; } } return indexSet; @@ -281,6 +285,28 @@ #pragma mark - Private methods +// Adds a footer to the section identified by |sectionInfo| if there is none +// present and the section info contains a title for it. +- (void)addFooterIfNeeded:(ContentSuggestionsSectionInformation*)sectionInfo { + NSInteger sectionIdentifier = SectionIdentifierForInfo(sectionInfo); + + __weak ContentSuggestionsCollectionUpdater* weakSelf = self; + if (sectionInfo.footerTitle && + ![self.collectionViewController.collectionViewModel + footerForSectionWithIdentifier:sectionIdentifier]) { + ContentSuggestionsFooterItem* footer = [[ContentSuggestionsFooterItem alloc] + initWithType:ItemTypeFooter + title:sectionInfo.footerTitle + block:^{ + [weakSelf runAdditionalActionForSection:sectionInfo]; + }]; + + [self.collectionViewController.collectionViewModel + setFooter:footer + forSectionWithIdentifier:sectionIdentifier]; + } +} + // Resets the models, removing the current CollectionViewItem and the // SectionInfo. - (void)resetModels { @@ -288,4 +314,35 @@ self.sectionInfoBySectionIdentifier = [[NSMutableDictionary alloc] init]; } +// Runs the additional action for the section identified by |sectionInfo|. +- (void)runAdditionalActionForSection: + (ContentSuggestionsSectionInformation*)sectionInfo { + SectionIdentifier sectionIdentifier = SectionIdentifierForInfo(sectionInfo); + + NSMutableArray<ContentSuggestionIdentifier*>* knownSuggestionIdentifiers = + [NSMutableArray array]; + + NSArray<CollectionViewItem<ContentSuggestionIdentification>*>* + knownSuggestions = [self.collectionViewController.collectionViewModel + itemsInSectionWithIdentifier:sectionIdentifier]; + for (CollectionViewItem<ContentSuggestionIdentification>* suggestion in + knownSuggestions) { + [knownSuggestionIdentifiers addObject:suggestion.suggestionIdentifier]; + } + + __weak ContentSuggestionsCollectionUpdater* weakSelf = self; + [self.dataSource + fetchMoreSuggestionsKnowing:knownSuggestionIdentifiers + fromSectionInfo:sectionInfo + callback:^(NSArray<ContentSuggestion*>* suggestions) { + [weakSelf moreSuggestionsFetched:suggestions]; + }]; +} + +// Adds the |suggestions| to the collection view. All the suggestions must have +// the same sectionInfo. +- (void)moreSuggestionsFetched:(NSArray<ContentSuggestion*>*)suggestions { + [self.collectionViewController addSuggestions:suggestions]; +} + @end
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_section_information.h b/ios/chrome/browser/ui/content_suggestions/content_suggestions_section_information.h index 2a0f2ca..c8af1ba 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_section_information.h +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_section_information.h
@@ -46,6 +46,8 @@ @property(nonatomic, assign, readonly) ContentSuggestionsSectionID sectionID; // Title for the section. @property(nonatomic, copy) NSString* title; +// Title of the section's footer. If it is nil, no footer is created. +@property(nonatomic, copy) NSString* footerTitle; @end
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_section_information.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_section_information.mm index 817f8aa..14b05cc 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_section_information.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_section_information.mm
@@ -16,6 +16,7 @@ @synthesize layout = _layout; @synthesize sectionID = _sectionID; @synthesize title = _title; +@synthesize footerTitle = _footerTitle; - (instancetype)initWithSectionID:(ContentSuggestionsSectionID)sectionID { self = [super init];
diff --git a/ios/third_party/material_components_ios/README.chromium b/ios/third_party/material_components_ios/README.chromium index dcfac6a..a2e1aa6 100644 --- a/ios/third_party/material_components_ios/README.chromium +++ b/ios/third_party/material_components_ios/README.chromium
@@ -1,7 +1,7 @@ Name: Material Components for iOS URL: https://github.com/material-components/material-components-ios Version: 0 -Revision: 6740cb50df612112a937a4d3f4f4bd88ef2f32d5 +Revision: 45f079e80193bb5153874b6aea882ea8b30dc017 License: Apache 2.0 License File: LICENSE Security Critical: yes
diff --git a/printing/backend/cups_helper.cc b/printing/backend/cups_helper.cc index aaf3f86..2b845ffd 100644 --- a/printing/backend/cups_helper.cc +++ b/printing/backend/cups_helper.cc
@@ -45,8 +45,6 @@ constexpr char kBrotherDuplex[] = "BRDuplex"; constexpr char kBrotherMonoColor[] = "BRMonoColor"; constexpr char kBrotherPrintQuality[] = "BRPrintQuality"; -constexpr char kFullColor[] = "FullColor"; -constexpr char kMono[] = "Mono"; const double kMicronsPerPoint = 10.0f * kHundrethsMMPerInch / kPointsPerInch; @@ -281,14 +279,15 @@ if (!color_mode_option) return false; - if (ppdFindChoice(color_mode_option, kFullColor) || - ppdFindChoice(color_mode_option, kColor)) { - *color_model_for_color = BROTHER_COLOR_COLOR; - } - if (ppdFindChoice(color_mode_option, kBlack) || - ppdFindChoice(color_mode_option, kMono)) { - *color_model_for_black = BROTHER_COLOR_BLACK; - } + if (ppdFindChoice(color_mode_option, kFullColor)) + *color_model_for_color = BROTHER_CUPS_COLOR; + else if (ppdFindChoice(color_mode_option, kColor)) + *color_model_for_color = BROTHER_BRSCRIPT3_COLOR; + + if (ppdFindChoice(color_mode_option, kMono)) + *color_model_for_black = BROTHER_CUPS_MONO; + else if (ppdFindChoice(color_mode_option, kBlack)) + *color_model_for_black = BROTHER_BRSCRIPT3_BLACK; ppd_choice_t* marked_choice = ppdFindMarkedChoice(ppd, kColorMode); if (!marked_choice) {
diff --git a/printing/backend/cups_helper_unittest.cc b/printing/backend/cups_helper_unittest.cc index 1acd900e..4aaf7ef 100644 --- a/printing/backend/cups_helper_unittest.cc +++ b/printing/backend/cups_helper_unittest.cc
@@ -216,8 +216,8 @@ EXPECT_TRUE(printing::ParsePpdCapabilities("test", kTestPpdData, &caps)); EXPECT_TRUE(caps.color_changeable); EXPECT_TRUE(caps.color_default); - EXPECT_EQ(printing::BROTHER_COLOR_COLOR, caps.color_model); - EXPECT_EQ(printing::BROTHER_COLOR_BLACK, caps.bw_model); + EXPECT_EQ(printing::BROTHER_BRSCRIPT3_COLOR, caps.color_model); + EXPECT_EQ(printing::BROTHER_BRSCRIPT3_BLACK, caps.bw_model); } { const char kTestPpdData[] = @@ -234,8 +234,8 @@ EXPECT_TRUE(printing::ParsePpdCapabilities("test", kTestPpdData, &caps)); EXPECT_TRUE(caps.color_changeable); EXPECT_TRUE(caps.color_default); - EXPECT_EQ(printing::BROTHER_COLOR_COLOR, caps.color_model); - EXPECT_EQ(printing::BROTHER_COLOR_BLACK, caps.bw_model); + EXPECT_EQ(printing::BROTHER_CUPS_COLOR, caps.color_model); + EXPECT_EQ(printing::BROTHER_CUPS_MONO, caps.bw_model); } { const char kTestPpdData[] =
diff --git a/printing/pdf_metafile_skia.cc b/printing/pdf_metafile_skia.cc index beac575..fb6a3e6d 100644 --- a/printing/pdf_metafile_skia.cc +++ b/printing/pdf_metafile_skia.cc
@@ -207,7 +207,7 @@ } doc->close(); - data_->pdf_data_.reset(stream.detachAsStream()); + data_->pdf_data_ = std::unique_ptr<SkStreamAsset>(stream.detachAsStream()); return true; }
diff --git a/printing/print_job_constants.cc b/printing/print_job_constants.cc index 2299621..a613d8e 100644 --- a/printing/print_job_constants.cc +++ b/printing/print_job_constants.cc
@@ -203,9 +203,11 @@ const char kCMY_K[] = "CMY+K"; const char kCMY[] = "CMY"; const char kColor[] = "Color"; +const char kFullColor[] = "FullColor"; const char kGray[] = "Gray"; const char kGrayscale[] = "Grayscale"; const char kGreyscale[] = "Greyscale"; +const char kMono[] = "Mono"; const char kMonochrome[] = "Monochrome"; const char kNormal[] = "Normal"; const char kNormalGray[] = "Normal.Gray";
diff --git a/printing/print_job_constants.h b/printing/print_job_constants.h index a39afa5..5fcc9e3 100644 --- a/printing/print_job_constants.h +++ b/printing/print_job_constants.h
@@ -86,9 +86,11 @@ PRINTING_EXPORT extern const char kCMY_K[]; PRINTING_EXPORT extern const char kCMY[]; PRINTING_EXPORT extern const char kColor[]; +PRINTING_EXPORT extern const char kFullColor[]; PRINTING_EXPORT extern const char kGray[]; PRINTING_EXPORT extern const char kGrayscale[]; PRINTING_EXPORT extern const char kGreyscale[]; +PRINTING_EXPORT extern const char kMono[]; PRINTING_EXPORT extern const char kMonochrome[]; PRINTING_EXPORT extern const char kNormal[]; PRINTING_EXPORT extern const char kNormalGray[]; @@ -141,8 +143,10 @@ PROCESSCOLORMODEL_CMYK, // Used in Canon printer PPDs. PROCESSCOLORMODEL_GREYSCALE, // Used in Canon printer PPDs. PROCESSCOLORMODEL_RGB, // Used in Canon printer PPDs - BROTHER_COLOR_COLOR, // Used in Brother color printer PPDs. - BROTHER_COLOR_BLACK, // Used in Brother color printer PPDs. + BROTHER_CUPS_COLOR, // Used in Brother color laser printer PPDs. + BROTHER_CUPS_MONO, // Used in Brother color laser printer PPDs. + BROTHER_BRSCRIPT3_COLOR, // Used in Brother BRScript3 color printer PPDs. + BROTHER_BRSCRIPT3_BLACK, // Used in Brother BRScript3 color printer PPDs. }; // What kind of margins to use.
diff --git a/printing/print_settings.cc b/printing/print_settings.cc index 74d69fb1..5fc99e1c 100644 --- a/printing/print_settings.cc +++ b/printing/print_settings.cc
@@ -26,53 +26,55 @@ void GetColorModelForMode( int color_mode, std::string* color_setting_name, std::string* color_value) { #if defined(OS_MACOSX) - const char kCUPSColorMode[] = "ColorMode"; - const char kCUPSColorModel[] = "ColorModel"; - const char kCUPSPrintoutMode[] = "PrintoutMode"; - const char kCUPSProcessColorModel[] = "ProcessColorModel"; + constexpr char kCUPSColorMode[] = "ColorMode"; + constexpr char kCUPSColorModel[] = "ColorModel"; + constexpr char kCUPSPrintoutMode[] = "PrintoutMode"; + constexpr char kCUPSProcessColorModel[] = "ProcessColorModel"; + constexpr char kCUPSBrotherMonoColor[] = "BRMonoColor"; + constexpr char kCUPSBrotherPrintQuality[] = "BRPrintQuality"; #else - const char kCUPSColorMode[] = "cups-ColorMode"; - const char kCUPSColorModel[] = "cups-ColorModel"; - const char kCUPSPrintoutMode[] = "cups-PrintoutMode"; - const char kCUPSProcessColorModel[] = "cups-ProcessColorModel"; + constexpr char kCUPSColorMode[] = "cups-ColorMode"; + constexpr char kCUPSColorModel[] = "cups-ColorModel"; + constexpr char kCUPSPrintoutMode[] = "cups-PrintoutMode"; + constexpr char kCUPSProcessColorModel[] = "cups-ProcessColorModel"; + constexpr char kCUPSBrotherMonoColor[] = "cups-BRMonoColor"; + constexpr char kCUPSBrotherPrintQuality[] = "cups-BRPrintQuality"; #endif // defined(OS_MACOSX) color_setting_name->assign(kCUPSColorModel); switch (color_mode) { + case GRAY: + color_value->assign(kGray); + break; case COLOR: color_value->assign(kColor); break; case CMYK: color_value->assign(kCMYK); break; - case PRINTOUTMODE_NORMAL: - color_value->assign(kNormal); - color_setting_name->assign(kCUPSPrintoutMode); - break; - case PRINTOUTMODE_NORMAL_GRAY: - color_value->assign(kNormalGray); - color_setting_name->assign(kCUPSPrintoutMode); - break; - case RGB16: - color_value->assign(kRGB16); - break; - case RGBA: - color_value->assign(kRGBA); - break; - case RGB: - color_value->assign(kRGB); - break; case CMY: color_value->assign(kCMY); break; + case KCMY: + color_value->assign(kKCMY); + break; case CMY_K: color_value->assign(kCMY_K); break; case BLACK: color_value->assign(kBlack); break; - case GRAY: - color_value->assign(kGray); + case GRAYSCALE: + color_value->assign(kGrayscale); + break; + case RGB: + color_value->assign(kRGB); + break; + case RGB16: + color_value->assign(kRGB16); + break; + case RGBA: + color_value->assign(kRGBA); break; case COLORMODE_COLOR: color_setting_name->assign(kCUPSColorMode); @@ -90,6 +92,14 @@ color_setting_name->assign(kColor); color_value->assign(kBlack); break; + case PRINTOUTMODE_NORMAL: + color_setting_name->assign(kCUPSPrintoutMode); + color_value->assign(kNormal); + break; + case PRINTOUTMODE_NORMAL_GRAY: + color_setting_name->assign(kCUPSPrintoutMode); + color_value->assign(kNormalGray); + break; case PROCESSCOLORMODEL_CMYK: color_setting_name->assign(kCUPSProcessColorModel); color_value->assign(kCMYK); @@ -102,10 +112,20 @@ color_setting_name->assign(kCUPSProcessColorModel); color_value->assign(kRGB); break; - case BROTHER_COLOR_COLOR: + case BROTHER_CUPS_COLOR: + color_setting_name->assign(kCUPSBrotherMonoColor); + color_value->assign(kFullColor); + break; + case BROTHER_CUPS_MONO: + color_setting_name->assign(kCUPSBrotherMonoColor); + color_value->assign(kMono); + break; + case BROTHER_BRSCRIPT3_COLOR: + color_setting_name->assign(kCUPSBrotherPrintQuality); color_value->assign(kColor); break; - case BROTHER_COLOR_BLACK: + case BROTHER_BRSCRIPT3_BLACK: + color_setting_name->assign(kCUPSBrotherPrintQuality); color_value->assign(kBlack); break; default: @@ -120,7 +140,9 @@ color_mode != PRINTOUTMODE_NORMAL_GRAY && color_mode != COLORMODE_MONOCHROME && color_mode != PROCESSCOLORMODEL_GREYSCALE && - color_mode != BROTHER_COLOR_BLACK && color_mode != HP_COLOR_BLACK); + color_mode != BROTHER_CUPS_MONO && + color_mode != BROTHER_BRSCRIPT3_BLACK && + color_mode != HP_COLOR_BLACK); } // Global SequenceNumber used for generating unique cookie values.
diff --git a/printing/printing_context_chromeos.cc b/printing/printing_context_chromeos.cc index 66ab353..32851bf 100644 --- a/printing/printing_context_chromeos.cc +++ b/printing/printing_context_chromeos.cc
@@ -46,7 +46,8 @@ case RGB16: case RGBA: case COLORMODE_COLOR: - case BROTHER_COLOR_COLOR: + case BROTHER_CUPS_COLOR: + case BROTHER_BRSCRIPT3_COLOR: case HP_COLOR_COLOR: case PRINTOUTMODE_NORMAL: case PROCESSCOLORMODEL_CMYK: @@ -57,7 +58,8 @@ case BLACK: case GRAYSCALE: case COLORMODE_MONOCHROME: - case BROTHER_COLOR_BLACK: + case BROTHER_CUPS_MONO: + case BROTHER_BRSCRIPT3_BLACK: case HP_COLOR_BLACK: case PRINTOUTMODE_NORMAL_GRAY: case PROCESSCOLORMODEL_GREYSCALE:
diff --git a/sql/vfs_wrapper.cc b/sql/vfs_wrapper.cc index c522be8..954d488 100644 --- a/sql/vfs_wrapper.cc +++ b/sql/vfs_wrapper.cc
@@ -11,6 +11,7 @@ #include "base/debug/leak_annotations.h" #include "base/logging.h" #include "base/memory/ptr_util.h" +#include "base/metrics/histogram_macros.h" #include "base/strings/string_piece.h" #if defined(OS_MACOSX) && !defined(OS_IOS) @@ -34,6 +35,54 @@ // Idiomatic SQLite would take the wrapped VFS szOsFile and increase it to store // additional data as a prefix. +// This enum must match the numbering from Sqlite.VfsEvents in histograms.xml. +// Do not reorder or remove items, only add new items before VFS_EVENT_MAX. +enum VfsEventType { + // VFS method xOpen() call. + VFS_OPEN = 0, + + // VFS method xDelete() call. + VFS_DELETE, + + // VFS method xAccess() call. + VFS_ACCESS, + + // VFS method xFullPathname() call. + VFS_FULLPATHNAME, + + // I/O method xClose() call, should balance VFS_OPEN. + VFS_IO_CLOSE, + + // I/O method xRead() call. + VFS_IO_READ, + + // I/O method xWrite() call. + VFS_IO_WRITE, + + // I/O method xTruncate() call. + VFS_IO_TRUNCATE, + + // I/O method xSync() call. + VFS_IO_SYNC, + + // I/O method xFileSize() call. + VFS_IO_FILESIZE, + + // I/O method xFetch() call. This is like xRead(), but when using + // memory-mapping. + VFS_IO_FETCH, + + // Add new items before this one, always keep this one at the end. + VFS_EVENT_MAX +}; + +// TODO(shess): If the VFS was parameterized, then results could be binned by +// database. It would require a separate VFS per database, though the variants +// could all use the same VFS functions. +void RecordVfsEvent(VfsEventType vfs_event) { + UMA_HISTOGRAM_ENUMERATION("Sqlite.Vfs_Events", vfs_event, VFS_EVENT_MAX); +} + sqlite3_vfs* GetWrappedVfs(sqlite3_vfs* wrapped_vfs) { return static_cast<sqlite3_vfs*>(wrapped_vfs->pAppData); } @@ -56,6 +105,8 @@ int Close(sqlite3_file* sqlite_file) { + RecordVfsEvent(VFS_IO_CLOSE); + VfsFile* file = AsVfsFile(sqlite_file); int r = file->wrapped_file->pMethods->xClose(file->wrapped_file); @@ -66,6 +117,9 @@ int Read(sqlite3_file* sqlite_file, void* buf, int amt, sqlite3_int64 ofs) { + RecordVfsEvent(VFS_IO_READ); + UMA_HISTOGRAM_COUNTS("Sqlite.Vfs_Read", amt); + sqlite3_file* wrapped_file = GetWrappedFile(sqlite_file); return wrapped_file->pMethods->xRead(wrapped_file, buf, amt, ofs); } @@ -73,24 +127,33 @@ int Write(sqlite3_file* sqlite_file, const void* buf, int amt, sqlite3_int64 ofs) { + RecordVfsEvent(VFS_IO_WRITE); + UMA_HISTOGRAM_COUNTS("Sqlite.Vfs_Write", amt); + sqlite3_file* wrapped_file = GetWrappedFile(sqlite_file); return wrapped_file->pMethods->xWrite(wrapped_file, buf, amt, ofs); } int Truncate(sqlite3_file* sqlite_file, sqlite3_int64 size) { + RecordVfsEvent(VFS_IO_TRUNCATE); + sqlite3_file* wrapped_file = GetWrappedFile(sqlite_file); return wrapped_file->pMethods->xTruncate(wrapped_file, size); } int Sync(sqlite3_file* sqlite_file, int flags) { + RecordVfsEvent(VFS_IO_SYNC); + sqlite3_file* wrapped_file = GetWrappedFile(sqlite_file); return wrapped_file->pMethods->xSync(wrapped_file, flags); } int FileSize(sqlite3_file* sqlite_file, sqlite3_int64* size) { + RecordVfsEvent(VFS_IO_FILESIZE); + sqlite3_file* wrapped_file = GetWrappedFile(sqlite_file); return wrapped_file->pMethods->xFileSize(wrapped_file, size); } @@ -154,6 +217,9 @@ } int Fetch(sqlite3_file *sqlite_file, sqlite3_int64 off, int amt, void **pp) { + RecordVfsEvent(VFS_IO_FETCH); + UMA_HISTOGRAM_COUNTS("Sqlite.Vfs_Fetch", amt); + sqlite3_file* wrapped_file = GetWrappedFile(sqlite_file); return wrapped_file->pMethods->xFetch(wrapped_file, off, amt, pp); } @@ -177,6 +243,8 @@ int Open(sqlite3_vfs* vfs, const char* file_name, sqlite3_file* wrapper_file, int desired_flags, int* used_flags) { + RecordVfsEvent(VFS_OPEN); + sqlite3_vfs* wrapped_vfs = GetWrappedVfs(vfs); sqlite3_file* wrapped_file = static_cast<sqlite3_file*>( @@ -298,17 +366,23 @@ } int Delete(sqlite3_vfs* vfs, const char* file_name, int sync_dir) { + RecordVfsEvent(VFS_DELETE); + sqlite3_vfs* wrapped_vfs = GetWrappedVfs(vfs); return wrapped_vfs->xDelete(wrapped_vfs, file_name, sync_dir); } int Access(sqlite3_vfs* vfs, const char* file_name, int flag, int* res) { + RecordVfsEvent(VFS_ACCESS); + sqlite3_vfs* wrapped_vfs = GetWrappedVfs(vfs); return wrapped_vfs->xAccess(wrapped_vfs, file_name, flag, res); } int FullPathname(sqlite3_vfs* vfs, const char* relative_path, int buf_size, char* absolute_path) { + RecordVfsEvent(VFS_FULLPATHNAME); + sqlite3_vfs* wrapped_vfs = GetWrappedVfs(vfs); return wrapped_vfs->xFullPathname( wrapped_vfs, relative_path, buf_size, absolute_path);
diff --git a/testing/android/docs/README.md b/testing/android/docs/README.md index a802e30..5563d115 100644 --- a/testing/android/docs/README.md +++ b/testing/android/docs/README.md
@@ -7,7 +7,7 @@ - [... set up an emulator for local testing?](/testing/android/docs/todo.md) - **writing tests** - [... write an instrumentation test?](/testing/android/docs/instrumentation.md) - - [... write a Robolectric test?](/testing/android/docs/todo.md) + - [... write a JUnit or Robolectric test?](/testing/android/docs/junit.md) - **running tests** - [... run a gtest?](/testing/android/docs/todo.md) - [... run an instrumentation test?](/testing/android/docs/todo.md)
diff --git a/testing/android/docs/junit.md b/testing/android/docs/junit.md new file mode 100644 index 0000000..3fc14952 --- /dev/null +++ b/testing/android/docs/junit.md
@@ -0,0 +1,121 @@ +# JUnit Tests + +JUnit tests are Java unit tests. These tests run locally on your workstation. + +[TOC] + +## Writing a JUnit test + +When writing JUnit tests, you must decide whether you need to use Android code. +If you want to use Android code you must write a [Robolectric](http://robolectric.org/) test. + +### JUnit tests (without Android) + +Build these types of test using the `junit_binary` GN template. + +If you don't need to use any Android code in your tests, you can write plain, +old JUnit tests. Some more documentation about writing JUnit tests can be +found [here](https://github.com/junit-team/junit4/wiki/Getting-started). + +#### Example Code + +```java +package org.chromium.sample.test; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.BlockJUnit4ClassRunner; + +@RunWith(BlockJUnit4ClassRunner.class) +public class MyJUnitTest { + + @Test + public void exampleTest() { + boolean shouldWriteMoreJUnitTests = true; + assertTrue(shouldWriteMoreJUnitTests); + } +} +``` + +#### Example within Chromium + +See the [junit_unit_tests](https://cs.chromium.org/chromium/src/testing/android/junit/BUILD.gn) test suite. + +### JUnit tests with Robolectric + +Build these types of test using the `junit_binary` GN template. + +Robolectric is a unit testing framework that lets you run tests with Android +code on your workstation. It does this by providing a special version of the +Android SDK jar that can run in your host JVM. Some more information about +Robolectric can be found [here](http://robolectric.org/). + +#### Useful Tips + +* Use `@RunWith(LocalRobolectricTestRunner.class)` for all Chromium Robolectric tests. +* Use `@Config(manifest = Config.NONE)` for tests. + Currently, you are unable to pass your app's AndroidManifest to Robolectric. +* You can specify the Android SDK to run your test with with `@Config(sdk = ??)`. + +> Currently, only SDK levels 18, 21, and 25 are supported in Chromium +> but more can be added on request. + +#### Example Code + +```java +package org.chromium.sample.test; + +import static org.junit.Assert.assertTrue; + +import android.text.TextUtils; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.annotation.Config; + +import org.chromium.testing.local.LocalRobolectricTestRunner; + +// Be sure to specify to run tests with the LocalRobolectricTestRunner. The +// default JUnit test runner won't load the Robolectric Android code properly. +@RunWith(LocalRobolectricTestRunner.class) +// Can specify some Robolectric related configs here. +// More about configuring Robolectric at http://robolectric.org/configuring/. +// SDK will default to the latest we support in Chromium. +@Config(manifest = Config.NONE, sdk = 21) +public class MyRobolectricJUnitTest { + + @Test + public void exampleTest() { + String testString = "test"; + + // Even though these tests runs on the host, Android classes are + // available to use thanks to Robolectric. + assertTrue(TextUtils.equals(testString, "test")); + } +} +``` + +#### Example within Chromium + +See the [content_junit_tests](https://cs.chromium.org/chromium/src/content/public/android/BUILD.gn) test suite. + +## Running JUnit tests + +After writing a test, you can run it by: + +1. Adding the test file to a `junit_binary` GN target. +2. Rebuild. +3. GN will generate binary `<out_dir>/bin/run_<suite name>` which + can be used to run your test. + +For example, the following can be used to run chrome_junit_tests. + +```bash +# Build the test suite after adding our new test. +ninja -C out/Debug chrome_junit_tests + +# Run the test! +out/Debug/bin/run_chrome_junit_tests +``` \ No newline at end of file
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index a778e7a..c0b5ad2 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -223,10 +223,11 @@ "gtest_tests": [ { "args": [ - "--shared-prefs-file=src/chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json", - "--additional-apk=src/third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk" + "--shared-prefs-file=../../chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json", + "--additional-apk=../../third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk", + "--strict-mode=off" ], - "name": "nonddready-cardboard-current_chrome_public_test_vr_apk", + "name": "chrome_public_test_vr_apk-nonddready-cardboard-current-kitkat", "override_compile_targets": [ "chrome_public_test_vr_apk" ], @@ -236,7 +237,55 @@ "dimension_sets": [ { "android_devices": "4", - "device_os": "NRD91N", + "device_os": "KTU84P", + "device_type": "hammerhead" + } + ], + "hard_timeout": 960 + }, + "test": "chrome_public_test_vr_apk" + }, + { + "args": [ + "--shared-prefs-file=../../chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json", + "--additional-apk=../../third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk", + "--strict-mode=off" + ], + "name": "chrome_public_test_vr_apk-nonddready-cardboard-current-lollipop", + "override_compile_targets": [ + "chrome_public_test_vr_apk" + ], + "override_isolate_target": "chrome_public_test_vr_apk", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "4", + "device_os": "LMY48I", + "device_type": "hammerhead" + } + ], + "hard_timeout": 960 + }, + "test": "chrome_public_test_vr_apk" + }, + { + "args": [ + "--shared-prefs-file=../../chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json", + "--additional-apk=../../third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk", + "--strict-mode=off" + ], + "name": "chrome_public_test_vr_apk-nonddready-cardboard-current-marshmallow", + "override_compile_targets": [ + "chrome_public_test_vr_apk" + ], + "override_isolate_target": "chrome_public_test_vr_apk", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "4", + "device_os": "MMB29Q", "device_type": "bullhead" } ],
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index f8a8fd37..82f4701c 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -11,7 +11,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -42,7 +42,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -73,7 +73,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -104,7 +104,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -368,7 +368,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -399,7 +399,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -430,7 +430,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -698,7 +698,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -730,7 +730,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -762,7 +762,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -794,7 +794,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -826,7 +826,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -1100,7 +1100,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -1131,7 +1131,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -1162,7 +1162,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -1426,7 +1426,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -1457,7 +1457,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -1488,7 +1488,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -1519,7 +1519,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -1783,7 +1783,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -1814,7 +1814,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -1845,7 +1845,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -2109,7 +2109,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -2140,7 +2140,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [ @@ -2171,7 +2171,7 @@ { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", "location": "bin", - "revision": "git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58" + "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c" } ], "dimension_sets": [
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-browser-side-navigation b/third_party/WebKit/LayoutTests/FlagExpectations/enable-browser-side-navigation index 9ff174e..acc7ffc 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-browser-side-navigation +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-browser-side-navigation
@@ -12,19 +12,16 @@ crbug.com/555418 virtual/mojo-loading/http/tests/security/contentSecurityPolicy/1.1/form-action-src-redirect-blocked.html [ Failure ] crbug.com/555418 virtual/mojo-loading/http/tests/security/isolatedWorld/bypass-main-world-csp-iframes.html [ Failure ] -# Missing console warning about usage of legacy protocol. -Bug(none) external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html [ Failure ] - -# Missing error messages. -Bug(none) external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html [ Failure ] - # https://crbug.com/695072: Preserve SourceLocation information. # This results in a missing line number in console error messages. +crbug.com/695072 http/tests/security/location-href-clears-username-password.html [ Failure ] +crbug.com/695072 virtual/mojo-loading/http/tests/security/location-href-clears-username-password.html [ Failure ] # The following tests need teh SourceLocation forwarded to the renderer when adding MixedContents error messages to the console. crbug.com/695072 http/tests/security/mixedContent/insecure-iframe-with-hsts.https.html [ Failure ] crbug.com/695072 virtual/mojo-loading/http/tests/security/mixedContent/insecure-iframe-with-hsts.https.html [ Failure ] # These tests are flaky. Bug(none) http/tests/misc/window-open-then-write.html [ Timeout ] -Bug(none) external/wpt/html/browsers/browsing-the-web/unloading-documents/beforeunload-on-history-back.html [ Failure ] +Bug(none) http/tests/security/popup-allowed-by-sandbox-can-navigate.html [ Failure ] Bug(none) virtual/mojo-loading/http/tests/misc/window-open-then-write.html [ Timeout ] +Bug(none) virtual/mojo-loading/http/tests/security/popup-allowed-by-sandbox-can-navigate.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/NeverFixTests b/third_party/WebKit/LayoutTests/NeverFixTests index bf8e15d..c6049c0d 100644 --- a/third_party/WebKit/LayoutTests/NeverFixTests +++ b/third_party/WebKit/LayoutTests/NeverFixTests
@@ -218,6 +218,7 @@ external/wpt/gyroscope [ WontFix ] external/wpt/magnetometer [ WontFix ] external/wpt/upgrade-insecure-requests [ WontFix ] +external/wpt/longtask-timing [ WontFix ] # WPT manual tests without automation external/wpt/html/semantics/forms/constraints/tooShort-input-email-add-manual.html [ WontFix ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index e2cf74f..a9a0d99 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -1637,7 +1637,7 @@ crbug.com/509025 [ Mac10.10 ] fast/forms/select/hidden-listbox.html [ Failure ] crbug.com/509025 [ Mac10.10 ] fast/forms/textarea/textarea-newline.html [ Failure ] -crbug.com/545140 [ Mac10.10 Mac10.11 Retina ] fast/encoding/denormalised-voiced-japanese-chars.html [ Failure ] +crbug.com/545140 [ Mac10.10 Mac10.11 Retina Mac10.12 ] fast/encoding/denormalised-voiced-japanese-chars.html [ Failure ] crbug.com/636248 [ Mac ] http/tests/security/img-crossorigin-no-credentials-prompt.html [ Failure Pass ] crbug.com/636248 [ Mac ] virtual/mojo-loading/http/tests/security/img-crossorigin-no-credentials-prompt.html [ Failure Pass ] @@ -1927,8 +1927,6 @@ # ====== New tests from w3c-test-autoroller added here ====== crbug.com/626703 external/wpt/html/semantics/interactive-elements/context-menus/contextmenu-event-manual.htm [ Timeout ] crbug.com/626703 external/wpt/html/webappapis/scripting/events/event-handler-processing-algorithm-manual.html [ Timeout ] -crbug.com/626703 external/wpt/longtask-timing/longtask-in-childiframe-crossorigin.html [ Timeout ] -crbug.com/626703 external/wpt/longtask-timing/longtask-in-sibling-iframe-crossorigin.html [ Timeout ] crbug.com/626703 external/wpt/orientation-event/deviceorientationabsoluteevent.html [ Timeout ] crbug.com/626703 external/wpt/orientation-event/free-fall-manual.html [ Timeout ] crbug.com/626703 external/wpt/orientation-event/screen-upmost-manual.html [ Timeout ] @@ -2426,125 +2424,6 @@ crbug.com/697971 [ Mac10.12 ] external/wpt/webvtt/parsing/file-parsing/tests/settings-region.html [ Failure ] crbug.com/697971 [ Mac10.12 ] external/wpt/workers/semantics/encodings/001.html [ Failure ] crbug.com/697971 [ Mac10.12 ] external/wpt/workers/semantics/encodings/002.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/block/basic/001.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/block/float/float-avoidance.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/block/float/intruding-painted-twice.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/block/margin-collapse/103.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/block/positioning/047.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/block/positioning/inline-block-relposition.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/borders/borderRadiusAllStylesAllCorners.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/borders/borderRadiusDashed01.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/borders/borderRadiusDashed02.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/borders/borderRadiusDashed03.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/borders/borderRadiusDashed04.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/borders/borderRadiusDashed05.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/borders/borderRadiusDashed06.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/borders/borderRadiusDotted01.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/borders/borderRadiusDotted04.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/borders/inline-mask-overlay-image-outset.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/box-shadow/inset-subpixel.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/box-shadow/inset.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/css-generated-content/012.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/css-generated-content/014.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/css/acid2-pixel.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/css/clip-zooming.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/css/continuationCrash.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/css/h1-in-section-elements.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/css/input-search-padding.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/css/line-height.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/css/margin-top-bottom-dynamic.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/css/rem-calc-dynamic-scaling.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/css/rem-dynamic-scaling.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/css/text-overflow-input.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/dnd/link-dragging-draggable-div-with-dragged-link.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/dnd/link-dragging-non-draggable-link.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/dom/HTMLInputElement/input-image-alt-text.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/dom/HTMLMeterElement/meter-optimums.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/dom/HTMLTableColElement/resize-table-using-col-width.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/dynamic/008.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/dynamic/012.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/dynamic/positioned-movement-with-positioned-children.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/encoding/denormalised-voiced-japanese-chars.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/events/autoscroll.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/events/context-no-deselect.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/files/file-in-input-display.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/inline/absolute-positioned-inline-in-centred-block.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/invalid/014.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/lists/dynamic-marker-crash.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/lists/ordered-list-with-no-ol-tag.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/multicol/multicol-with-child-renderLayer-for-input.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/overflow/overflow-x-y.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/overflow/scroll-nested-positioned-layer-in-overflow.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/overflow/scrollRevealButton.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/parser/document-write-option.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/parser/entity-comment-in-textarea.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/parser/open-comment-in-textarea.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/replaced/border-radius-clip-content-edge.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/replaced/replaced-breaking-mixture.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/replaced/replaced-breaking.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/replaced/width100percent-button.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/selectors/064.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/selectors/166.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/spatial-navigation/snav-multiple-select-focusring.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/append-cells2.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-cell-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-cell.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-column-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-column-group-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-column.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-quirks-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-quirks.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-row-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-row-group-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table-row.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_border-table.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_layers-hide-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_layers-hide.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-cell.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-column-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-column-group-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-column-group.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-column.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-row-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-row-group-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table-row.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_position-table.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-cell-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-cell.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-column-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-column-group-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-column-group.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-column.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-row-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-row-group-collapsed-border.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/backgr_simple-table-row.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/remove-td-display-none.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/spanOverlapRepaint.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/table/text-field-baseline.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/color-emoji.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/complex-preferred-logical-widths.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/drawBidiText.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/emoticons.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/emphasis-complex.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/fallback-traits-fixup.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/font-fallback.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/font-ligature-letter-spacing.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/international/bidi-listbox-atsui.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/international/bidi-listbox.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/international/khmer-selection.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/international/lang-glyph-cache-separation.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/international/mixed-directionality-selection.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/international/unicode-bidi-plaintext-in-textarea.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/justify-ideograph-complex.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/justify-ideograph-simple.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/justify-ideograph-vertical.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/midword-break-before-surrogate-pair.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/textIteratorNilRenderer.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/unicode-fallback-font.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/text/updateNewFont.html [ Failure ] -crbug.com/697971 [ Mac10.12 ] fast/writing-mode/text-combine-various-fonts.html [ Failure ] crbug.com/697971 [ Mac10.12 ] fonts/sans-serif.html [ Failure ] crbug.com/697971 [ Mac10.12 ] html/details_summary/details-marker-style.html [ Failure ] crbug.com/697971 [ Mac10.12 ] html/details_summary/details-replace-summary-child.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/W3CImportExpectations b/third_party/WebKit/LayoutTests/W3CImportExpectations index ef2a81b..06273080 100644 --- a/third_party/WebKit/LayoutTests/W3CImportExpectations +++ b/third_party/WebKit/LayoutTests/W3CImportExpectations
@@ -1,14 +1,18 @@ -# This file controls which subdirectories of the w3c test repos we do (or don't) import. +# This file controls which subdirectories of the w3c test repos we import. # -# This file acts as a blacklist; directories and files not listed here will automatically -# be found and imported. +# This file acts as a blacklist; directories and files not listed here will +# automatically be found and imported. # # This file is read by webkitpy/w3c/directory_owners_extractor.py to decide who -# to contact for new failures; to allow it to read +# to contact for new failures; it will read entries with the following format: # When removing blacklist entries: -# * Comment out the line rather than deleting it, to show it is intentional +# * Comment out the line rather than deleting it, to show it is intentional. # * Change [ Skip ] to [ Pass ] # * Add a leading comment: ## Owners: user@example.com +# +# We may want to move towards importing but not running directories without +# owners, in order to make it easier to enable or run them in the future -- +# directories that are imported but not run are listed in NeverFixTests. external/csswg-test/WOFF2-UserAgent [ Skip ] external/csswg-test/compositing-1 [ Skip ]
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json index 1c8f015a..66e5ac7 100644 --- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json +++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -24280,11 +24280,31 @@ {} ] ], + "streams/writable-streams/general-expected.txt": [ + [ + {} + ] + ], + "streams/writable-streams/general.dedicatedworker-expected.txt": [ + [ + {} + ] + ], "streams/writable-streams/general.js": [ [ {} ] ], + "streams/writable-streams/general.serviceworker.https-expected.txt": [ + [ + {} + ] + ], + "streams/writable-streams/general.sharedworker-expected.txt": [ + [ + {} + ] + ], "streams/writable-streams/reentrant-strategy.js": [ [ {} @@ -90554,11 +90574,11 @@ "support" ], "streams/writable-streams/aborting-expected.txt": [ - "84e08dacc259de6782a334f9b26b202c54ac8f97", + "210d85192e93c09fb3a4c8993a606a8c3aa8f811", "support" ], "streams/writable-streams/aborting.dedicatedworker-expected.txt": [ - "84e08dacc259de6782a334f9b26b202c54ac8f97", + "210d85192e93c09fb3a4c8993a606a8c3aa8f811", "support" ], "streams/writable-streams/aborting.dedicatedworker.html": [ @@ -90574,7 +90594,7 @@ "support" ], "streams/writable-streams/aborting.serviceworker.https-expected.txt": [ - "7842749164cd9c2ffdbc8e9571d364d8726e04bf", + "db653cba3d2b892e55bf8c58d31dd9442f35e866", "support" ], "streams/writable-streams/aborting.serviceworker.https.html": [ @@ -90582,7 +90602,7 @@ "testharness" ], "streams/writable-streams/aborting.sharedworker-expected.txt": [ - "84e08dacc259de6782a334f9b26b202c54ac8f97", + "210d85192e93c09fb3a4c8993a606a8c3aa8f811", "support" ], "streams/writable-streams/aborting.sharedworker.html": [ @@ -90773,6 +90793,14 @@ "00af09f46d126d6d2944d13831896e648094d1a8", "testharness" ], + "streams/writable-streams/general-expected.txt": [ + "6fcdba9711e8ed258dc6801ca63a263984313010", + "support" + ], + "streams/writable-streams/general.dedicatedworker-expected.txt": [ + "6fcdba9711e8ed258dc6801ca63a263984313010", + "support" + ], "streams/writable-streams/general.dedicatedworker.html": [ "8583d80450b090c16ed0795170340d040449bbc1", "testharness" @@ -90785,10 +90813,18 @@ "7a6fb1ccd2f77edc2077ec127716d3d2edcf8475", "support" ], + "streams/writable-streams/general.serviceworker.https-expected.txt": [ + "6980ba2dee4162a716013626dcee9fed88157fe7", + "support" + ], "streams/writable-streams/general.serviceworker.https.html": [ "1792d6c45a5687777291a4dab031a954aa053752", "testharness" ], + "streams/writable-streams/general.sharedworker-expected.txt": [ + "6fcdba9711e8ed258dc6801ca63a263984313010", + "support" + ], "streams/writable-streams/general.sharedworker.html": [ "44f9ceaa3bfc9d8b92885997d322486bd0f237a6", "testharness"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/the-window-object/window-named-properties-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/the-window-object/window-named-properties-expected.txt index e960af7..60a9c4b 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/html/browsers/the-window-object/window-named-properties-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/html/browsers/the-window-object/window-named-properties-expected.txt
@@ -3,7 +3,7 @@ PASS Static name on the prototype FAIL constructor assert_false: gsp.hasOwnProperty("constructor") expected false got true FAIL duplicate property names assert_equals: expected 1 but got 0 -FAIL Dynamic name assert_true: foo not in window expected true got false +PASS Dynamic name PASS Ghost name Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-attributes-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-attributes-expected.txt deleted file mode 100644 index f34fa8d2..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-attributes-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Performance longtask entries are observable assert_equals: expected "same-origin-self" but got "self" -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-childiframe-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-childiframe-expected.txt deleted file mode 100644 index 8157a5a9..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-childiframe-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Performance longtask entries in child iframe are observable in parent assert_equals: expected "same-origin-descendant" but got "multiple-contexts" -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-externalscript-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-externalscript-expected.txt deleted file mode 100644 index f34fa8d2..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-externalscript-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Performance longtask entries are observable assert_equals: expected "same-origin-self" but got "self" -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-parentiframe-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-parentiframe-expected.txt deleted file mode 100644 index 7a9aad07..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-parentiframe-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Performance longtask entries in parent are observable in child iframe assert_equals: expected "longtask+same-origin-ancestor+frame" but got "longtask+same-origin-ancestor+script" -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-raf-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-raf-expected.txt deleted file mode 100644 index f34fa8d2..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-raf-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Performance longtask entries are observable assert_equals: expected "same-origin-self" but got "self" -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-sibling-iframe-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-sibling-iframe-expected.txt deleted file mode 100644 index c40d96d..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/longtask-timing/longtask-in-sibling-iframe-expected.txt +++ /dev/null
@@ -1,4 +0,0 @@ -This is a testharness.js-based test. -FAIL Performance longtask entries in parent are observable in child iframe assert_equals: expected "longtask+same-origin+frame" but got "longtask+multiple-contexts+script" -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-init.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-init.https-expected.txt index 954e916..ec0c1bf7 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-init.https-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/mediacapture-streams/MediaStreamTrack-init.https-expected.txt
@@ -25,7 +25,7 @@ FAIL MediaStreamTrack interface: attribute onoverconstrained assert_true: The prototype object must have a property "onoverconstrained" expected true got false PASS MediaStreamTrack interface: operation clone() PASS MediaStreamTrack interface: operation stop() -FAIL MediaStreamTrack interface: operation getCapabilities() assert_own_property: interface prototype object missing non-static operation expected property "getCapabilities" missing +PASS MediaStreamTrack interface: operation getCapabilities() PASS MediaStreamTrack interface: operation getConstraints() PASS MediaStreamTrack interface: operation getSettings() FAIL MediaStreamTrack interface: operation applyConstraints(MediaTrackConstraints) assert_own_property: interface prototype object missing non-static operation expected property "applyConstraints" missing @@ -43,7 +43,7 @@ FAIL MediaStreamTrack interface: track must inherit property "onoverconstrained" with the proper type (9) assert_inherits: property "onoverconstrained" not found in prototype chain PASS MediaStreamTrack interface: track must inherit property "clone" with the proper type (10) PASS MediaStreamTrack interface: track must inherit property "stop" with the proper type (11) -FAIL MediaStreamTrack interface: track must inherit property "getCapabilities" with the proper type (12) assert_inherits: property "getCapabilities" not found in prototype chain +PASS MediaStreamTrack interface: track must inherit property "getCapabilities" with the proper type (12) PASS MediaStreamTrack interface: track must inherit property "getConstraints" with the proper type (13) PASS MediaStreamTrack interface: track must inherit property "getSettings" with the proper type (14) FAIL MediaStreamTrack interface: track must inherit property "applyConstraints" with the proper type (15) assert_inherits: property "applyConstraints" not found in prototype chain
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed01-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed01-expected.png index 7cacee31..d0e1c1dd 100644 --- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed01-expected.png +++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed01-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed02-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed02-expected.png index ccf71f8..197931b 100644 --- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed02-expected.png +++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed02-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed03-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed03-expected.png index 15a820c..93ad8819 100644 --- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed03-expected.png +++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed03-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed04-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed04-expected.png index e8b1ed8..6801ab8 100644 --- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed04-expected.png +++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed04-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed05-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed05-expected.png index b532901d..eb136ed4 100644 --- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed05-expected.png +++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed05-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed06-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed06-expected.png index 16bc2e3..a33965f 100644 --- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed06-expected.png +++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDashed06-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted01-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted01-expected.png index b5fcef5..803dd075 100644 --- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted01-expected.png +++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted01-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted04-expected.png b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted04-expected.png index 991543c0..ed9ed195 100644 --- a/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted04-expected.png +++ b/third_party/WebKit/LayoutTests/fast/borders/borderRadiusDotted04-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/imagecapture/MediaStreamTrack-getCapabilities.html b/third_party/WebKit/LayoutTests/fast/imagecapture/MediaStreamTrack-getCapabilities.html new file mode 100644 index 0000000..6ba461e --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/imagecapture/MediaStreamTrack-getCapabilities.html
@@ -0,0 +1,29 @@ +<!DOCTYPE html> +<script src=../../resources/testharness.js></script> +<script src=../../resources/testharnessreport.js></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +// This test verifies that MediaStreamTrack.getCapabilities() exists and that it +// returns something. Other tests go deeper. +test(function() { + var canvas = document.getElementById('canvas'); + var context = canvas.getContext("2d"); + context.fillStyle = "red"; + context.fillRect(0, 0, 10, 10); + + var stream = canvas.captureStream(); + assert_equals(stream.getAudioTracks().length, 0); + assert_equals(stream.getVideoTracks().length, 1); + + var videoTrack = stream.getVideoTracks()[0]; + + assert_equals(typeof videoTrack.getCapabilities, 'function'); + + capabilities = videoTrack.getCapabilities(); + assert_equals(typeof capabilities, 'object'); +}, 'MediaStreamTrack.getCapabilities()'); + +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/replaced/border-radius-clip-content-edge-expected.png b/third_party/WebKit/LayoutTests/fast/replaced/border-radius-clip-content-edge-expected.png index 357e19c..a1c0a0c 100644 --- a/third_party/WebKit/LayoutTests/fast/replaced/border-radius-clip-content-edge-expected.png +++ b/third_party/WebKit/LayoutTests/fast/replaced/border-radius-clip-content-edge-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/text/font-ligature-letter-spacing-expected.txt b/third_party/WebKit/LayoutTests/fast/text/font-ligature-letter-spacing-expected.txt index 9c60e5c..399ab86 100644 --- a/third_party/WebKit/LayoutTests/fast/text/font-ligature-letter-spacing-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/text/font-ligature-letter-spacing-expected.txt
@@ -1,4 +1,5 @@ This is a testharness.js-based test. +Harness Error. harness_status.status = 1 , harness_status.message = 1 duplicate test name: "Ligature expected not to be applied due to letter spacing." FAIL Ligature expected not to be applied due to letter spacing. assert_equals: Ligature not applied due to letter spacing. expected 282.96875 but got 138.359375 FAIL Ligature expected not to be applied due to letter spacing. assert_equals: Ligature not applied due to letter spacing. expected 282.96875 but got 138.359375 PASS Non-ligature font feature expected to be applied despite letter spacing.
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/document-all-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/document-all-expected.txt index 0a01a63..ca9071d 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/document-all-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/document-all-expected.txt
@@ -1,3 +1,2 @@ -CONSOLE ERROR: line 1: Uncaught SecurityError: Blocked a frame with origin "null" from accessing a frame with origin "http://localhost:8080". The frame requesting access has a protocol of "data", the frame being accessed has a protocol of "http". Protocols must match. - +ALERT: true
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/window-named-proto-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/window-named-proto-expected.txt index 0a01a63..415dc9e 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/window-named-proto-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/window-named-proto-expected.txt
@@ -1,3 +1,2 @@ -CONSOLE ERROR: line 1: Uncaught SecurityError: Blocked a frame with origin "null" from accessing a frame with origin "http://localhost:8080". The frame requesting access has a protocol of "data", the frame being accessed has a protocol of "http". Protocols must match. - +CONSOLE ERROR: line 2: Uncaught TypeError: Cannot read property 'innerHTML' of null
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/xss-DENIED-window-name-alert-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/xss-DENIED-window-name-alert-expected.txt index f7ad433c..cdf2b2d 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/xss-DENIED-window-name-alert-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/security/xss-DENIED-window-name-alert-expected.txt
@@ -1,2 +1,3 @@ -CONSOLE MESSAGE: line 8: SecurityError: Blocked a frame with origin "null" from accessing a cross-origin frame. +CONSOLE MESSAGE: line 6: FAIL +CONSOLE MESSAGE: line 7: compatible with old versions = true
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/xss-DENIED-window-name-alert.html b/third_party/WebKit/LayoutTests/http/tests/security/xss-DENIED-window-name-alert.html index 584b0fa..8f740e8 100644 --- a/third_party/WebKit/LayoutTests/http/tests/security/xss-DENIED-window-name-alert.html +++ b/third_party/WebKit/LayoutTests/http/tests/security/xss-DENIED-window-name-alert.html
@@ -10,6 +10,7 @@ try { top.alert; console.log('FAIL'); + console.log('compatible with old versions = ' + (top.alert === window)); } catch (e) { console.log(e.toString()); }
diff --git a/third_party/WebKit/LayoutTests/imagecapture/MediaStreamTrack-getCapabilities.html b/third_party/WebKit/LayoutTests/imagecapture/MediaStreamTrack-getCapabilities.html new file mode 100644 index 0000000..902d4a2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/imagecapture/MediaStreamTrack-getCapabilities.html
@@ -0,0 +1,139 @@ +<!DOCTYPE html> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<script src="../resources/mojo-helpers.js"></script> +<script src="resources/mock-imagecapture.js"></script> +<body> +<canvas id='canvas' width=10 height=10/> +</body> +<script> + +const meteringModeNames = ["none", "manual", "single-shot", "continuous"]; +const fillLightModeNames = ["none", "off", "auto", "flash", "torch"]; + +// This test verifies that MediaTrackCapabilities are returned upon +// MediaStreamTrack.getCapabilities(), with a mock Mojo service implementation. + +async_test(function(t) { + var canvas = document.getElementById('canvas'); + var context = canvas.getContext("2d"); + context.fillStyle = "red"; + context.fillRect(0, 0, 10, 10); + + var mock_capabilities; + mockImageCaptureReady + .then(mock => { + mock_capabilities = mock.capabilities(); + + // |stream| must be created _after_ |mock| is constructed to give the + // latter time to override the bindings. + var stream = canvas.captureStream(); + assert_equals(stream.getAudioTracks().length, 0); + assert_equals(stream.getVideoTracks().length, 1); + + var videoTrack = stream.getVideoTracks()[0]; + assert_equals(typeof videoTrack.getCapabilities, 'function'); + + // |videoTrack|s capabilities, just like the actual capture, is a process + // kicked right after creation, we introduce a small delay to allow for + // those to be collected. + setTimeout(() => { + capabilities = videoTrack.getCapabilities(); + assert_equals(typeof capabilities, 'object'); + + // TODO(mcasas): Change the following checks when the supported modes + // are changed to a list: https://crbug.com/700607. + assert_equals(capabilities.focusMode[0], + meteringModeNames[mock_capabilities.focus_mode], 'focusMode'); + + assert_equals(capabilities.exposureMode[0], + meteringModeNames[mock_capabilities.exposure_mode], 'exposureMode;'); + + assert_equals(capabilities.whiteBalanceMode[0], + meteringModeNames[mock_capabilities.white_balance_mode], + 'whiteBalanceMode'); + + assert_true(capabilities.exposureCompensation instanceof + MediaSettingsRange); + assert_equals(capabilities.exposureCompensation.max, + mock_capabilities.exposure_compensation.max); + assert_equals(capabilities.exposureCompensation.min, + mock_capabilities.exposure_compensation.min); + assert_equals(capabilities.exposureCompensation.current, + mock_capabilities.exposure_compensation.current); + assert_equals(capabilities.exposureCompensation.step, + mock_capabilities.exposure_compensation.step); + + assert_true(capabilities.colorTemperature instanceof MediaSettingsRange); + assert_equals(capabilities.colorTemperature.max, + mock_capabilities.color_temperature.max); + assert_equals(capabilities.colorTemperature.min, + mock_capabilities.color_temperature.min); + assert_equals(capabilities.colorTemperature.current, + mock_capabilities.color_temperature.current); + assert_equals(capabilities.colorTemperature.step, + mock_capabilities.color_temperature.step); + + assert_true(capabilities.iso instanceof MediaSettingsRange); + assert_equals(capabilities.iso.max, mock_capabilities.iso.max); + assert_equals(capabilities.iso.min, mock_capabilities.iso.min); + assert_equals(capabilities.iso.current, mock_capabilities.iso.current); + assert_equals(capabilities.iso.step, mock_capabilities.iso.step); + + assert_true(capabilities.brightness instanceof MediaSettingsRange); + assert_equals(capabilities.brightness.max, + mock_capabilities.brightness.max); + assert_equals(capabilities.brightness.min, + mock_capabilities.brightness.min); + assert_equals(capabilities.brightness.current, + mock_capabilities.brightness.current); + assert_equals(capabilities.brightness.step, + mock_capabilities.brightness.step); + + assert_true(capabilities.contrast instanceof MediaSettingsRange); + assert_equals(capabilities.contrast.max, mock_capabilities.contrast.max); + assert_equals(capabilities.contrast.min, mock_capabilities.contrast.min); + assert_equals(capabilities.contrast.current, + mock_capabilities.contrast.current); + assert_equals(capabilities.contrast.step, + mock_capabilities.contrast.step); + + assert_true(capabilities.saturation instanceof MediaSettingsRange); + assert_equals(capabilities.saturation.max, + mock_capabilities.saturation.max); + assert_equals(capabilities.saturation.min, + mock_capabilities.saturation.min); + assert_equals(capabilities.saturation.current, + mock_capabilities.saturation.current); + assert_equals(capabilities.saturation.step, + mock_capabilities.saturation.step); + + assert_true(capabilities.sharpness instanceof MediaSettingsRange); + assert_equals(capabilities.sharpness.max, + mock_capabilities.sharpness.max); + assert_equals(capabilities.sharpness.min, + mock_capabilities.sharpness.min); + assert_equals(capabilities.sharpness.current, + mock_capabilities.sharpness.current); + assert_equals(capabilities.sharpness.step, + mock_capabilities.sharpness.step); + + assert_true(capabilities.zoom instanceof MediaSettingsRange); + assert_equals(capabilities.zoom.max, mock_capabilities.zoom.max); + assert_equals(capabilities.zoom.min, mock_capabilities.zoom.min); + assert_equals(capabilities.zoom.current, mock_capabilities.zoom.current); + assert_equals(capabilities.zoom.step, mock_capabilities.zoom.step); + + // TODO(mcasas): check |torch| when the mojom interface is updated, + // https://crbug.com/700607. + + t.done(); + }, 100); + }) + .catch(error => { + assert_unreached("Error creating MockImageCapture: " + error); + }) + +}, 'exercises the retrieval of MediaTrackCapabilities'); + +</script>
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/basic/001-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/basic/001-expected.png new file mode 100644 index 0000000..b9409a0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/basic/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/float/float-avoidance-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/float/float-avoidance-expected.png new file mode 100644 index 0000000..4bd985d --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/float/float-avoidance-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/margin-collapse/103-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/margin-collapse/103-expected.png new file mode 100644 index 0000000..a79a9b1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/margin-collapse/103-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/margin-collapse/103-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/margin-collapse/103-expected.txt new file mode 100644 index 0000000..9479e05f --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/margin-collapse/103-expected.txt
@@ -0,0 +1,183 @@ +layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 1707 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 785x1707 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutBlockFlow {HTML} at (0,0) size 785x1706.95 + LayoutBlockFlow {BODY} at (8,20) size 769x1666.95 [bgcolor=#A6A972] + LayoutBlockFlow {DIV} at (83.50,0) size 602x1666.95 [bgcolor=#FDFDE9] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (1,31) size 600x70 + LayoutBlockFlow {DIV} at (1,114.33) size 600x1480.63 + LayoutBlockFlow {P} at (20,0) size 560x80 [color=#333333] + LayoutText {#text} at (0,2) size 537x36 + text run at (0,2) width 537: "We are trying to understand how UVic students perform Shakespeare related research for" + text run at (0,22) width 272: "classes as well as for their own interest. The " + LayoutInline {A} at (0,0) size 179x16 + LayoutText {#text} at (271,22) size 179x16 + text run at (271,22) width 179: "Internet Shakespeare Editions" + LayoutText {#text} at (449,22) size 553x56 + text run at (449,22) width 61: " are being" + text run at (0,42) width 282: "developed for students as well as Shakespeare " + text run at (281,42) width 272: "scholars world wide to better understand the" + text run at (0,62) width 249: "man, his plays and our interpretations of " + text run at (248,62) width 37: "them." + LayoutBlockFlow {P} at (20,93.33) size 560x20 [color=#333333] + LayoutText {#text} at (0,2) size 475x16 + text run at (0,2) width 475: "Please take the time to carefully review and complete the following questions." + LayoutBlockFlow {FORM} at (20,138.33) size 560x1308.97 + LayoutBlockFlow {H2} at (0,0) size 560x16 [color=#333333] + LayoutText {#text} at (0,0) size 202x16 + text run at (0,0) width 202: "PERSONAL INFORMATION" + LayoutBlockFlow (floating) {SPAN} at (0,26) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 70x16 + text run at (0,2) width 70: "Your Name*" + LayoutTextControl {INPUT} at (325,26) size 186x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] + LayoutBlockFlow (floating) {SPAN} at (0,46) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 124x16 + text run at (0,2) width 124: "Your e-mail address*" + LayoutTextControl {INPUT} at (325,45) size 186x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] + LayoutBlockFlow (floating) {SPAN} at (0,66) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 131x16 + text run at (0,2) width 131: "Your degree program*" + LayoutMenuList {SELECT} at (325,64) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 86x13 + text run at (8,2) width 86: "Program options" + LayoutBlockFlow (floating) {SPAN} at (0,86) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 115x16 + text run at (0,2) width 115: "Your year of study*" + LayoutMenuList {SELECT} at (325,82) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 121x13 + text run at (8,2) width 121: "Years you've been here" + LayoutBlockFlow (floating) {SPAN} at (0,106) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 157x16 + text run at (0,2) width 157: "Shakespeare classes taken" + LayoutMenuList {SELECT} at (325,100) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 73x13 + text run at (8,2) width 73: "Number taken" + LayoutBlockFlow {P} at (0,131.33) size 560x20 [color=#333333] + LayoutText {#text} at (0,2) size 161x16 + text run at (0,2) width 161: "* indicates a required field" + LayoutBlockFlow {H2} at (0,176.33) size 560x16 [color=#333333] + LayoutText {#text} at (0,0) size 298x16 + text run at (0,0) width 298: "SHAKESPEARE RESEARCH QUESTIONS" + LayoutBlockFlow (floating) {SPAN} at (0,202.33) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 286x36 + text run at (0,2) width 286: "What percentage of your research time is spent" + text run at (0,22) width 42: "online?" + LayoutMenuList {SELECT} at (325,202.33) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 105x13 + text run at (8,2) width 105: "Percentages of time" + LayoutBlockFlow (floating) {SPAN} at (0,222.33) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 308x36 + text run at (0,2) width 308: "What is holding you back from doing more research" + text run at (0,22) width 42: "online?" + LayoutMenuList {SELECT} at (325,220.33) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 44x13 + text run at (8,2) width 44: "Reasons" + LayoutBlockFlow (floating) {SPAN} at (0,242.33) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 228x16 + text run at (0,2) width 228: "Your research is primarily focused on:" + LayoutBlockFlow {SPAN} at (325,238.33) size 180x20 [color=#333333] + LayoutBlockFlow {INPUT} at (2.95,4) size 12x13 [color=#000000] + LayoutText {#text} at (17,2) size 34x16 + text run at (17,2) width 34: "Texts" + LayoutBlockFlow {SPAN} at (325,258.33) size 180x20 [color=#333333] + LayoutBlockFlow {INPUT} at (2.95,4) size 12x13 [color=#000000] + LayoutText {#text} at (17,2) size 138x16 + text run at (17,2) width 138: "Performance materials" + LayoutBlockFlow {SPAN} at (325,278.33) size 180x20 [color=#333333] + LayoutBlockFlow {INPUT} at (2.95,4) size 12x13 [color=#000000] + LayoutText {#text} at (17,2) size 23x16 + text run at (17,2) width 23: "n/a" + LayoutBlockFlow {H2} at (0,323.33) size 560x16 [color=#333333] + LayoutText {#text} at (0,0) size 373x16 + text run at (0,0) width 373: "INTERNET SHAKESPEARE EDITIONS QUESTIONS" + LayoutBlockFlow (floating) {SPAN} at (0,349.33) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 312x16 + text run at (0,2) width 312: "Have you used UVic's Internet Shakespeare Editions?" + LayoutBlockFlow {SPAN} at (325,349.33) size 180x20 [color=#333333] + LayoutText {#text} at (0,2) size 21x16 + text run at (0,2) width 21: "Yes" + LayoutBlockFlow {INPUT} at (23.22,4) size 12x13 [color=#000000] + LayoutText {#text} at (38,2) size 20x16 + text run at (38,2) width 5: " " + text run at (42,2) width 16: "No" + LayoutBlockFlow {INPUT} at (60.80,4) size 12x13 [color=#000000] + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {P} at (0,382.66) size 560x20 [color=#333333] + LayoutText {#text} at (0,2) size 388x16 + text run at (0,2) width 388: "-- If you answered no to this question, skip to the next section --" + LayoutBlockFlow (floating) {SPAN} at (0,415.98) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 282x16 + text run at (0,2) width 282: "Which area of the ISE did you find most useful?" + LayoutMenuList {SELECT} at (325,415.98) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 99x13 + text run at (8,2) width 99: "Sections of the ISE" + LayoutBlockFlow (floating) {SPAN} at (0,435.98) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 257x16 + text run at (0,2) width 257: "How did you find the navigation of the ISE?" + LayoutMenuList {SELECT} at (325,433.98) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 90x13 + text run at (8,2) width 90: "Level of difficulty" + LayoutBlockFlow (floating) {SPAN} at (0,455.98) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 213x16 + text run at (0,2) width 213: "Please describe your use of the ISE." + LayoutBlockFlow {H2} at (0,607.98) size 560x16 [color=#333333] + LayoutText {#text} at (0,0) size 290x16 + text run at (0,0) width 290: "TOOLS IN DEVELOPMENT QUESTIONS" + LayoutBlockFlow {P} at (0,637.31) size 560x60 [color=#333333] + LayoutText {#text} at (0,2) size 554x56 + text run at (0,2) width 463: "We are in the process of both making new material available and developing " + text run at (462,2) width 75: "new tools to" + text run at (0,22) width 393: "view and extrapolate information from Shakespeare's works. The " + text run at (392,22) width 162: "following images are visual" + text run at (0,42) width 353: "representations of some of the ideas being thrown around." + LayoutBlockFlow {P} at (0,710.64) size 560x20 [color=#333333] + LayoutText {#text} at (0,2) size 347x16 + text run at (0,2) width 347: "Please review them carefully and provide feedback below" + LayoutBlockFlow (floating) {SPAN} at (0,743.97) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 149x16 + text run at (0,2) width 149: "Your comments on Fig. 1" + LayoutBlockFlow (floating) {SPAN} at (0,874.97) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 149x16 + text run at (0,2) width 149: "Your comments on Fig. 2" + LayoutBlockFlow (floating) {SPAN} at (0,1005.97) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 149x16 + text run at (0,2) width 149: "Your comments on Fig. 3" + LayoutBlockFlow {H2} at (0,1156.97) size 560x16 [color=#333333] + LayoutText {#text} at (0,0) size 143x16 + text run at (0,0) width 143: "OTHER FEEDBACK" + LayoutBlockFlow (floating) {SPAN} at (0,1182.97) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 228x16 + text run at (0,2) width 228: "Please enter any other thoughts here." + LayoutBlockFlow {P} at (20,1460.63) size 560x20 [color=#333333] + LayoutText {#text} at (0,2) size 237x16 + text run at (0,2) width 237: "Thank you for your time filling this out." + LayoutBlockFlow {DIV} at (1,1614.95) size 600x51 [border: (1px dashed #A6A972) none] + LayoutBlockFlow {SPAN} at (0,16) size 600x20 [color=#333333] + LayoutText {#text} at (245,2) size 110x16 + text run at (245,2) width 110: "\x{A9}2003 Kevin Davis" +layer at (441,302) size 180x13 + LayoutBlockFlow {DIV} at (3,3) size 180x13 +layer at (441,321) size 180x13 + LayoutBlockFlow {DIV} at (3,3) size 180x13 +layer at (113,750) size 506x106 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutTextControl {TEXTAREA} at (0,476.98) size 506x106 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 500x13 +layer at (113,1037) size 506x106 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutTextControl {TEXTAREA} at (0,763.97) size 506x106 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 500x13 +layer at (113,1168) size 506x106 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutTextControl {TEXTAREA} at (0,894.97) size 506x106 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 500x13 +layer at (113,1299) size 506x106 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutTextControl {TEXTAREA} at (0,1025.97) size 506x106 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 500x13 +layer at (113,1476) size 506x106 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutTextControl {TEXTAREA} at (0,1202.97) size 506x106 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 500x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/positioning/047-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/positioning/047-expected.png new file mode 100644 index 0000000..f8ca3a3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/positioning/047-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/positioning/inline-block-relposition-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/positioning/inline-block-relposition-expected.png new file mode 100644 index 0000000..91df33ad5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/positioning/inline-block-relposition-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/positioning/inline-block-relposition-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/positioning/inline-block-relposition-expected.txt new file mode 100644 index 0000000..29097d9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/block/positioning/inline-block-relposition-expected.txt
@@ -0,0 +1,15 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x34 + LayoutBlockFlow {HTML} at (0,0) size 800x34 + LayoutBlockFlow {BODY} at (8,8) size 784x18 + LayoutText {#text} at (0,0) size 0x0 +layer at (8,8) size 100x18 + LayoutButton (relative positioned) {BUTTON} at (0,0) size 100x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 84x13 + LayoutText {#text} at (19,0) size 46x13 + text run at (19,0) width 46: "Click Me" +layer at (88,23) size 23x13 + LayoutBlockFlow (positioned) {DIV} at (80.03,15) size 22.97x13 + LayoutText {#text} at (0,0) size 23x13 + text run at (0,0) width 23: "Now"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusAllStylesAllCorners-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusAllStylesAllCorners-expected.png deleted file mode 100644 index add80dc..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusAllStylesAllCorners-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed01-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed01-expected.png deleted file mode 100644 index d0e1c1dd..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed01-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed02-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed02-expected.png deleted file mode 100644 index 197931b..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed02-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed03-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed03-expected.png deleted file mode 100644 index 93ad8819..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed03-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed04-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed04-expected.png deleted file mode 100644 index 6801ab8..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed04-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed05-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed05-expected.png deleted file mode 100644 index eb136ed4..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed05-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed06-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed06-expected.png deleted file mode 100644 index a33965f..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDashed06-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDotted01-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDotted01-expected.png deleted file mode 100644 index 803dd075..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDotted01-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDotted04-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDotted04-expected.png deleted file mode 100644 index ed9ed195..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/borderRadiusDotted04-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/inline-mask-overlay-image-outset-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/inline-mask-overlay-image-outset-expected.png new file mode 100644 index 0000000..2fe6dd9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/borders/inline-mask-overlay-image-outset-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-expected.png deleted file mode 100644 index f8ff6cb..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-subpixel-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-subpixel-expected.png deleted file mode 100644 index e127032..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/box-shadow/inset-subpixel-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css-generated-content/014-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css-generated-content/014-expected.png new file mode 100644 index 0000000..e60a978 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css-generated-content/014-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/acid2-pixel-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/acid2-pixel-expected.png new file mode 100644 index 0000000..e2836b18 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/acid2-pixel-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/continuationCrash-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/continuationCrash-expected.png new file mode 100644 index 0000000..a7b8227 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/continuationCrash-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/continuationCrash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/continuationCrash-expected.txt new file mode 100644 index 0000000..a209f0a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/continuationCrash-expected.txt
@@ -0,0 +1,66 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x576 + LayoutBlockFlow (anonymous) at (0,0) size 784x0 + LayoutInline {SPAN} at (0,0) size 0x0 + LayoutInline {SPAN} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {H4} at (0,0) size 784x18 + LayoutText {#text} at (0,0) size 83x18 + text run at (0,0) width 83: "Instructions" + LayoutBlockFlow {P} at (0,39.27) size 784x18 + LayoutText {#text} at (0,0) size 180x18 + text run at (0,0) width 180: "Click the following buttons." + LayoutBlockFlow {OL} at (0,73.27) size 784x163 + LayoutListItem {LI} at (40,0) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "1" + LayoutText {#text} at (0,0) size 199x18 + text run at (0,0) width 199: "Start with the outmost left one." + LayoutListItem {LI} at (40,18) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "2" + LayoutText {#text} at (0,0) size 138x18 + text run at (0,0) width 138: "Click the middle one." + LayoutListItem {LI} at (40,36) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "3" + LayoutText {#text} at (0,0) size 271x18 + text run at (0,0) width 271: "(The ouline will not be updated correctly.)" + LayoutListItem {LI} at (40,54) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "4" + LayoutText {#text} at (0,0) size 142x18 + text run at (0,0) width 142: "Click the right button." + LayoutListItem {LI} at (40,72) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "5" + LayoutText {#text} at (0,0) size 473x18 + text run at (0,0) width 473: "This will crash Safari 1.3 (v176 and v170, no other configurations tested)." + LayoutListItem {LI} at (40,90) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "6" + LayoutText {#text} at (0,0) size 300x18 + text run at (0,0) width 300: "The combination 2. 1. 3. will also crash Safari." + LayoutListItem {LI} at (40,108) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "7" + LayoutText {#text} at (0,0) size 457x18 + text run at (0,0) width 457: "1. 3. will not crash Safari. (But the outline should vanish. Shouldn't it?)" + LayoutListItem {LI} at (40,126) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "8" + LayoutText {#text} at (0,0) size 205x18 + text run at (0,0) width 205: "2. 3. will not crash Safari either." + LayoutBlockFlow (anonymous) at (40,144) size 744x19 + LayoutButton {INPUT} at (0,1) size 130.53x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 114.53x13 + LayoutText {#text} at (0,0) size 115x13 + text run at (0,0) width 115: "1. Set outline property" + LayoutText {#text} at (130,0) size 5x18 + text run at (130,0) width 5: " " + LayoutButton {INPUT} at (134.53,1) size 133.58x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 117.58x13 + LayoutText {#text} at (0,0) size 118x13 + text run at (0,0) width 118: "2. Set display property" + LayoutText {#text} at (268,0) size 5x18 + text run at (268,0) width 5: " " + LayoutButton {INPUT} at (272.11,1) size 145.05x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 129.05x13 + LayoutText {#text} at (0,0) size 130x13 + text run at (0,0) width 130: "3. Replace span-element" + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/h1-in-section-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/h1-in-section-elements-expected.png new file mode 100644 index 0000000..12a1c5e5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/h1-in-section-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/input-search-padding-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/input-search-padding-expected.png new file mode 100644 index 0000000..fabc1455 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/input-search-padding-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/line-height-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/line-height-expected.txt new file mode 100644 index 0000000..b24c1f4e --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/line-height-expected.txt
@@ -0,0 +1,24 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {DIV} at (0,0) size 784x18 + LayoutText {#text} at (0,0) size 54x18 + text run at (0,0) width 54: "Test for " + LayoutInline {A} at (0,0) size 121x18 [color=#0000EE] + LayoutText {#text} at (53,0) size 121x18 + text run at (53,0) width 121: "Bugzilla Bug 9934" + LayoutText {#text} at (173,0) size 462x18 + text run at (173,0) width 462: " Selecting text in text field with {line-height:100%} causes it to bounce." + LayoutBlockFlow {DIV} at (0,18) size 784x19 + LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] + LayoutBlockFlow {DIV} at (0,37) size 784x36 + LayoutText {#text} at (0,0) size 749x36 + text run at (0,0) width 585: "Select the text in the text field using horizontal mouse movements, then drag up and down. " + text run at (584,0) width 165: "The text should not move" + text run at (0,18) width 64: "vertically." +layer at (11,29) size 125x13 + LayoutBlockFlow {DIV} at (3,3) size 125x13 + LayoutText {#text} at (0,0) size 67x13 + text run at (0,0) width 67: "Lorem Ipsum"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/margin-top-bottom-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/margin-top-bottom-dynamic-expected.txt new file mode 100644 index 0000000..a0b36ae --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/margin-top-bottom-dynamic-expected.txt
@@ -0,0 +1,71 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {P} at (0,0) size 784x18 + LayoutText {#text} at (0,0) size 256x18 + text run at (0,0) width 256: "What it should look like (positive case):" + LayoutBlockFlow {DIV} at (0,34) size 784x72 [border: (1px solid #008000)] + LayoutBlockFlow {DIV} at (1,11) size 782x20 [border: (1px solid #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow {DIV} at (1,41) size 782x20 [border: (1px dotted #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow {P} at (0,122) size 784x18 + LayoutText {#text} at (0,0) size 260x18 + text run at (0,0) width 260: "What it should look like (negative case):" + LayoutBlockFlow {DIV} at (0,156) size 784x32 [border: (1px solid #008000)] + LayoutBlockFlow {DIV} at (1,11) size 782x20 [border: (1px solid #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow {DIV} at (1,21) size 782x20 [border: (1px dotted #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow {P} at (0,204) size 784x18 + LayoutText {#text} at (0,0) size 380x18 + text run at (0,0) width 380: "Dynamic case (automatically testing positive --> negative):" + LayoutBlockFlow {DIV} at (0,238) size 784x32 [border: (1px solid #008000)] + LayoutBlockFlow {DIV} at (1,11) size 782x20 [border: (1px solid #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow {DIV} at (1,21) size 782x20 [border: (1px dotted #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow (anonymous) at (0,270) size 784x37 + LayoutBR {BR} at (0,0) size 0x18 + LayoutButton {INPUT} at (0,19) size 100.56x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 84.56x13 + LayoutText {#text} at (0,0) size 85x13 + text run at (0,0) width 85: "Negative margin" + LayoutText {#text} at (100,18) size 5x18 + text run at (100,18) width 5: " " + LayoutButton {INPUT} at (104.56,19) size 95.14x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 79.14x13 + LayoutText {#text} at (0,0) size 80x13 + text run at (0,0) width 80: "Positive margin" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {P} at (0,323) size 784x18 + LayoutText {#text} at (0,0) size 458x18 + text run at (0,0) width 458: "Dynamic case (automatically testing positive --> negative --> positive):" + LayoutBlockFlow {DIV} at (0,357) size 784x72 [border: (1px solid #008000)] + LayoutBlockFlow {DIV} at (1,11) size 782x20 [border: (1px solid #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow {DIV} at (1,41) size 782x20 [border: (1px dotted #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow (anonymous) at (0,429) size 784x37 + LayoutBR {BR} at (0,0) size 0x18 + LayoutButton {INPUT} at (0,19) size 100.56x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 84.56x13 + LayoutText {#text} at (0,0) size 85x13 + text run at (0,0) width 85: "Negative margin" + LayoutText {#text} at (100,18) size 5x18 + text run at (100,18) width 5: " " + LayoutButton {INPUT} at (104.56,19) size 95.14x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 79.14x13 + LayoutText {#text} at (0,0) size 80x13 + text run at (0,0) width 80: "Positive margin" + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/rem-calc-dynamic-scaling-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/rem-calc-dynamic-scaling-expected.png new file mode 100644 index 0000000..73d6433c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/rem-calc-dynamic-scaling-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/rem-dynamic-scaling-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/rem-dynamic-scaling-expected.png new file mode 100644 index 0000000..73d6433c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/css/rem-dynamic-scaling-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dnd/link-dragging-draggable-div-with-dragged-link-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dnd/link-dragging-draggable-div-with-dragged-link-expected.png new file mode 100644 index 0000000..57036e8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dnd/link-dragging-draggable-div-with-dragged-link-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dnd/link-dragging-non-draggable-link-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dnd/link-dragging-non-draggable-link-expected.png new file mode 100644 index 0000000..7c077df --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dnd/link-dragging-non-draggable-link-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLInputElement/input-image-alt-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLInputElement/input-image-alt-text-expected.png new file mode 100644 index 0000000..dcabc0e8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLInputElement/input-image-alt-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLInputElement/input-image-alt-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLInputElement/input-image-alt-text-expected.txt new file mode 100644 index 0000000..b85e24f --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLInputElement/input-image-alt-text-expected.txt
@@ -0,0 +1,30 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x576 + LayoutBlockFlow (anonymous) at (0,0) size 784x36 + LayoutText {#text} at (0,0) size 762x36 + text run at (0,0) width 493: "This tests whether alt text is shown for image-type form input elements with " + text run at (492,0) width 270: "no src attribute. You should see \"Success\"" + text run at (0,18) width 229: "twice, followed by a blue rectangle." + LayoutBlockFlow {P} at (0,52) size 784x0 + LayoutBlockFlow {FORM} at (0,52) size 784x94 + LayoutBlockFlow {INPUT} at (0,0) size 47.44x17 + LayoutBR {BR} at (47,17) size 1x0 + LayoutBlockFlow {INPUT} at (0,17) size 102x52 [border: (1px solid #000000)] + LayoutBR {BR} at (102,68) size 0x0 + LayoutImage {INPUT} at (0,69) size 75x25 + LayoutBR {BR} at (75,94) size 0x0 +layer at (8,60) size 47x17 clip at (9,61) size 45x15 + LayoutBlockFlow {DIV} at (0,0) size 47.44x17 [border: (1px solid #C0C0C0)] +layer at (10,62) size 43x13 + LayoutBlockFlow {DIV} at (2,2) size 43.44x13 + LayoutText {#text} at (0,0) size 44x13 + text run at (0,0) width 44: "Success" +layer at (9,78) size 100x50 clip at (10,79) size 98x48 + LayoutBlockFlow {DIV} at (1,1) size 100x50 [border: (1px solid #C0C0C0)] +layer at (11,80) size 96x13 + LayoutBlockFlow {DIV} at (2,2) size 96x13 + LayoutText {#text} at (0,0) size 44x13 + text run at (0,0) width 44: "Success"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLMeterElement/meter-optimums-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLMeterElement/meter-optimums-expected.png new file mode 100644 index 0000000..d22d96db3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLMeterElement/meter-optimums-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.png new file mode 100644 index 0000000..47a8cd0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.txt new file mode 100644 index 0000000..3b2e158 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.txt
@@ -0,0 +1,38 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutTable {TABLE} at (0,0) size 664x52 [border: (1px outset #808080)] + LayoutTableCol {COLGROUP} at (0,0) size 0x0 + LayoutTableCol {COL} at (0,0) size 0x0 + LayoutTableCol {COL} at (0,0) size 0x0 + LayoutTableCol {COL} at (0,0) size 0x0 + LayoutTableSection {TBODY} at (1,1) size 662x50 + LayoutTableRow {TR} at (0,2) size 662x22 + LayoutTableCell {TD} at (2,2) size 500x22 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (2,2) size 73x18 + text run at (2,2) width 73: "col 1 row 1" + LayoutTableCell {TD} at (504,2) size 77x22 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1] + LayoutText {#text} at (2,2) size 73x18 + text run at (2,2) width 73: "col 2 row 1" + LayoutTableCell {TD} at (583,2) size 77x22 [border: (1px inset #808080)] [r=0 c=2 rs=1 cs=1] + LayoutText {#text} at (2,2) size 73x18 + text run at (2,2) width 73: "col 3 row 1" + LayoutTableRow {TR} at (0,26) size 662x22 + LayoutTableCell {TD} at (2,26) size 500x22 [border: (1px inset #808080)] [r=1 c=0 rs=1 cs=1] + LayoutText {#text} at (2,2) size 73x18 + text run at (2,2) width 73: "col 1 row 2" + LayoutTableCell {TD} at (504,26) size 77x22 [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1] + LayoutText {#text} at (2,2) size 73x18 + text run at (2,2) width 73: "col 2 row 2" + LayoutTableCell {TD} at (583,26) size 77x22 [border: (1px inset #808080)] [r=1 c=2 rs=1 cs=1] + LayoutText {#text} at (2,2) size 73x18 + text run at (2,2) width 73: "col 3 row 3" + LayoutBlockFlow (anonymous) at (0,52) size 784x18 + LayoutButton {BUTTON} at (0,0) size 355.27x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 339.27x13 + LayoutText {#text} at (0,0) size 340x13 + text run at (0,0) width 340: "Click me to test manually. The first column should grow to 500px." + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dynamic/008-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dynamic/008-expected.png new file mode 100644 index 0000000..41c33758 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dynamic/008-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dynamic/012-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dynamic/012-expected.png new file mode 100644 index 0000000..8c5ef4fd --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dynamic/012-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dynamic/positioned-movement-with-positioned-children-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dynamic/positioned-movement-with-positioned-children-expected.txt new file mode 100644 index 0000000..aa4a0052 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/dynamic/positioned-movement-with-positioned-children-expected.txt
@@ -0,0 +1,21 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {DIV} at (0,0) size 100x100 [bgcolor=#FF0000] + LayoutText {#text} at (0,0) size 99x54 + text run at (0,0) width 98: "You should not" + text run at (0,18) width 99: "see this. Resize" + text run at (0,36) width 79: "the window." +hidden layer at (8,8) size 0x0 + LayoutBlockFlow (positioned) {DIV} at (8,8) size 0x0 +hidden layer at (8,8) size 100x118 + LayoutBlockFlow (positioned) {DIV} at (0,0) size 100x118 + LayoutBlockFlow {DIV} at (0,0) size 100x100 [bgcolor=#008000] + LayoutBlockFlow (anonymous) at (0,100) size 100x18 + LayoutButton {BUTTON} at (0,0) size 50.48x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 34.48x13 + LayoutText {#text} at (0,0) size 35x13 + text run at (0,0) width 35: "Button" + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/files/file-in-input-display-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/files/file-in-input-display-expected.png new file mode 100644 index 0000000..b6069d39 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/files/file-in-input-display-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/inline/absolute-positioned-inline-in-centred-block-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/inline/absolute-positioned-inline-in-centred-block-expected.png new file mode 100644 index 0000000..e5684878 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/inline/absolute-positioned-inline-in-centred-block-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks-expected.png new file mode 100644 index 0000000..ec3bb0e --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/invalid/014-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/invalid/014-expected.png new file mode 100644 index 0000000..6cbaa21 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/invalid/014-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/lists/dynamic-marker-crash-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/lists/dynamic-marker-crash-expected.png new file mode 100644 index 0000000..af30f9c3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/lists/dynamic-marker-crash-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/multicol/multicol-with-child-renderLayer-for-input-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/multicol/multicol-with-child-renderLayer-for-input-expected.txt new file mode 100644 index 0000000..2a8707f --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/multicol/multicol-with-child-renderLayer-for-input-expected.txt
@@ -0,0 +1,29 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 +layer at (8,8) size 784x59 + LayoutBlockFlow {DIV} at (0,0) size 784x59 + LayoutMultiColumnSet (anonymous) at (0,0) size 784x59 +layer at (8,8) size 384x118 + LayoutMultiColumnFlowThread (anonymous) at (0,0) size 384x118 + LayoutText {#text} at (0,0) size 351x115 + text run at (0,0) width 71: "Filler Text " + text run at (70,0) width 281: "Filler Text Filler Text Filler Text Filler Text" + text run at (0,18) width 284: "Filler Text Filler Text Filler Text Filler Text " + text run at (283,18) width 68: "Filler Text" + text run at (0,36) width 351: "Filler Text Filler Text Filler Text Filler Text Filler Text" + text run at (0,59) width 213: "Filler Text Filler Text Filler Text " + text run at (212,59) width 72: "Filler Text " + text run at (283,59) width 68: "Filler Text" + text run at (0,77) width 351: "Filler Text Filler Text Filler Text Filler Text Filler Text" + text run at (0,97) width 142: "Filler Text Filler Text " + LayoutText {#text} at (0,0) size 0x0 +layer at (152,105) size 131x19 clip at (154,107) size 127x15 + LayoutTextControl (relative positioned) {INPUT} at (143.73,97) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] +layer at (155,108) size 125x13 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutBlockFlow {DIV} at (3,3) size 125x13 + LayoutText {#text} at (0,0) size 38x13 + text run at (0,0) width 38: "Testing" +caret: position 7 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/overflow-x-y-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/overflow-x-y-expected.png new file mode 100644 index 0000000..75e5f6e5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/overflow-x-y-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/overflow-x-y-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/overflow-x-y-expected.txt new file mode 100644 index 0000000..48948c133 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/overflow-x-y-expected.txt
@@ -0,0 +1,84 @@ +layer at (0,0) size 800x600 clip at (0,0) size 785x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 785x600 + LayoutBlockFlow {HTML} at (0,0) size 785x600 + LayoutBlockFlow {BODY} at (8,8) size 769x584 + LayoutBlockFlow (anonymous) at (0,0) size 769x18 + LayoutText {#text} at (0,0) size 317x18 + text run at (0,0) width 317: "The body should always have a vertical scrollbar." + LayoutBlockFlow (anonymous) at (0,218) size 769x51 + LayoutText {#text} at (141,33) size 4x18 + text run at (141,33) width 4: " " + LayoutText {#text} at (0,0) size 0x0 +layer at (8,26) size 300x100 clip at (8,26) size 285x100 scrollHeight 324 + LayoutBlockFlow {DIV} at (0,18) size 300x100 + LayoutText {#text} at (0,0) size 52x18 + text run at (0,0) width 52: "Y scroll" + LayoutBR {BR} at (51,14) size 1x0 + LayoutText {#text} at (0,18) size 52x18 + text run at (0,18) width 52: "Y scroll" + LayoutBR {BR} at (51,32) size 1x0 + LayoutText {#text} at (0,36) size 52x18 + text run at (0,36) width 52: "Y scroll" + LayoutBR {BR} at (51,50) size 1x0 + LayoutText {#text} at (0,54) size 52x18 + text run at (0,54) width 52: "Y scroll" + LayoutBR {BR} at (51,68) size 1x0 + LayoutText {#text} at (0,72) size 52x18 + text run at (0,72) width 52: "Y scroll" + LayoutBR {BR} at (51,86) size 1x0 + LayoutText {#text} at (0,90) size 52x18 + text run at (0,90) width 52: "Y scroll" + LayoutBR {BR} at (51,104) size 1x0 + LayoutText {#text} at (0,108) size 52x18 + text run at (0,108) width 52: "Y scroll" + LayoutBR {BR} at (51,122) size 1x0 + LayoutText {#text} at (0,126) size 52x18 + text run at (0,126) width 52: "Y scroll" + LayoutBR {BR} at (51,140) size 1x0 + LayoutText {#text} at (0,144) size 52x18 + text run at (0,144) width 52: "Y scroll" + LayoutBR {BR} at (51,158) size 1x0 + LayoutText {#text} at (0,162) size 52x18 + text run at (0,162) width 52: "Y scroll" + LayoutBR {BR} at (51,176) size 1x0 + LayoutText {#text} at (0,180) size 52x18 + text run at (0,180) width 52: "Y scroll" + LayoutBR {BR} at (51,194) size 1x0 + LayoutText {#text} at (0,198) size 52x18 + text run at (0,198) width 52: "Y scroll" + LayoutBR {BR} at (51,212) size 1x0 + LayoutText {#text} at (0,216) size 52x18 + text run at (0,216) width 52: "Y scroll" + LayoutBR {BR} at (51,230) size 1x0 + LayoutText {#text} at (0,234) size 52x18 + text run at (0,234) width 52: "Y scroll" + LayoutBR {BR} at (51,248) size 1x0 + LayoutText {#text} at (0,252) size 52x18 + text run at (0,252) width 52: "Y scroll" + LayoutBR {BR} at (51,266) size 1x0 + LayoutText {#text} at (0,270) size 52x18 + text run at (0,270) width 52: "Y scroll" + LayoutBR {BR} at (51,284) size 1x0 + LayoutText {#text} at (0,288) size 52x18 + text run at (0,288) width 52: "Y scroll" + LayoutBR {BR} at (51,302) size 1x0 + LayoutText {#text} at (0,306) size 52x18 + text run at (0,306) width 52: "Y scroll" + LayoutBR {BR} at (51,320) size 1x0 +layer at (8,126) size 300x100 clip at (8,126) size 300x85 scrollWidth 1208 + LayoutBlockFlow {DIV} at (0,118) size 300x100 + LayoutText {#text} at (0,0) size 1209x18 + text run at (0,0) width 496: "X scroll X scroll X scroll X scroll X scroll X scroll X scroll X scroll X scroll " + text run at (495,0) width 332: "X scroll X scroll X scroll X scroll X scroll X scroll " + text run at (826,0) width 383: "X scroll X scroll X scroll X scroll X scroll X scroll X scroll" +layer at (8,241) size 141x32 clip at (9,242) size 124x30 + LayoutTextControl {TEXTAREA} at (0,15) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 120x13 + LayoutText {#text} at (0,0) size 87x13 + text run at (0,0) width 87: "Textarea y-scroll" +layer at (153,226) size 141x47 clip at (154,227) size 139x30 + LayoutTextControl {TEXTAREA} at (145,0) size 141x47 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 135x13 + LayoutText {#text} at (0,0) size 87x13 + text run at (0,0) width 87: "Textarea x-scroll"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png new file mode 100644 index 0000000..a68aaeb --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.txt new file mode 100644 index 0000000..9faa65ef --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.txt
@@ -0,0 +1,19 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 +layer at (0,42) size 800x558 scrollY 278.00 scrollHeight 836 + LayoutBlockFlow (positioned) {DIV} at (0,42) size 800x558 +layer at (0,-236) size 570x836 backgroundClip at (0,42) size 800x558 clip at (0,42) size 800x558 + LayoutBlockFlow (positioned) {DIV} at (0,0) size 570.41x836 + LayoutBlockFlow (anonymous) at (0,0) size 570.41x18 + LayoutText {#text} at (0,0) size 571x18 + text run at (0,0) width 571: "This tests that we can scroll to reveal something in a nested positioned block in overflow." + LayoutBlockFlow {DIV} at (0,18) size 570.41x800 + LayoutBlockFlow (anonymous) at (0,818) size 570.41x18 + LayoutButton {INPUT} at (0,0) size 198.05x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 182.05x13 + LayoutText {#text} at (0,0) size 183x13 + text run at (0,0) width 183: "If you can see this, test has passed" + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/scrollRevealButton-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/scrollRevealButton-expected.png new file mode 100644 index 0000000..d11e8bf --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/scrollRevealButton-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/scrollRevealButton-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/scrollRevealButton-expected.txt new file mode 100644 index 0000000..0db695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/overflow/scrollRevealButton-expected.txt
@@ -0,0 +1,43 @@ +layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 5.00 scrollHeight 1188 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 785x1188 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutBlockFlow {HTML} at (0,0) size 785x1188 + LayoutBlockFlow {BODY} at (8,8) size 769x1172 + LayoutBlockFlow (anonymous) at (0,0) size 769x18 + LayoutText {#text} at (0,0) size 348x18 + text run at (0,0) width 348: "This test should scroll recursively to reveal the button." + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {DIV} at (0,18) size 769x500 + LayoutBlockFlow (anonymous) at (0,518) size 769x154 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {DIV} at (0,672) size 769x500 +layer at (8,526) size 304x154 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutIFrame {IFRAME} at (0,0) size 304x154 [border: (2px inset #EEEEEE)] + layer at (0,0) size 300x150 clip at (0,0) size 285x135 scrollY 90.00 scrollWidth 308 scrollHeight 316 + LayoutView at (0,0) size 300x150 + layer at (0,0) size 285x316 backgroundClip at (0,0) size 285x135 clip at (0,0) size 285x135 + LayoutBlockFlow {HTML} at (0,0) size 285x316 + LayoutBlockFlow {BODY} at (8,8) size 269x300 + layer at (8,8) size 300x300 backgroundClip at (8,8) size 277x127 clip at (8,8) size 277x127 scrollY 543.00 scrollHeight 1268 + LayoutBlockFlow {DIV} at (0,0) size 300x300 + LayoutBlockFlow (anonymous) at (0,0) size 285x18 + LayoutText {#text} at (0,0) size 89x18 + text run at (0,0) width 89: "overflow:auto" + LayoutBlockFlow {DIV} at (0,18) size 285x600 + LayoutBlockFlow {DIV} at (0,768) size 285x500 + layer at (8,83) size 150x150 backgroundClip at (8,83) size 150x52 clip at (8,83) size 135x52 scrollY 470.00 scrollHeight 854 + LayoutBlockFlow {DIV} at (0,618) size 150x150 + LayoutBlockFlow (anonymous) at (0,0) size 135x18 + LayoutText {#text} at (0,0) size 89x18 + text run at (0,0) width 89: "overflow:auto" + LayoutBlockFlow {DIV} at (0,18) size 135x500 + LayoutBlockFlow (anonymous) at (0,518) size 135x36 + LayoutBR {BR} at (0,0) size 0x18 + LayoutButton {INPUT} at (0,18) size 50.48x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 34.48x13 + LayoutText {#text} at (0,0) size 35x13 + text run at (0,0) width 35: "Button" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {DIV} at (0,554) size 135x300 +scrolled to 0,5 +frame 'fr' scrolled to 0,90
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/document-write-option-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/document-write-option-expected.png new file mode 100644 index 0000000..eefd03c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/document-write-option-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/document-write-option-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/document-write-option-expected.txt new file mode 100644 index 0000000..d6a8e39 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/document-write-option-expected.txt
@@ -0,0 +1,10 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutMenuList {SELECT} at (0,0) size 313x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 313x18 + LayoutText (anonymous) at (8,2) size 282x13 + text run at (8,2) width 282: "This is a very long string so it makes the select bigger." + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/entity-comment-in-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/entity-comment-in-textarea-expected.png new file mode 100644 index 0000000..b7b30b5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/entity-comment-in-textarea-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/open-comment-in-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/open-comment-in-textarea-expected.png new file mode 100644 index 0000000..372b4fa --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/open-comment-in-textarea-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/open-comment-in-textarea-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/open-comment-in-textarea-expected.txt new file mode 100644 index 0000000..a0dd458 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/parser/open-comment-in-textarea-expected.txt
@@ -0,0 +1,18 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutText {#text} at (141,18) size 251x18 + text run at (141,18) width 251: " This should not be part of the textarea." +layer at (8,8) size 141x32 clip at (9,9) size 124x30 scrollHeight 56 + LayoutTextControl {TEXTAREA} at (0,0) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 120x52 + LayoutText {#text} at (0,0) size 118x39 + text run at (0,0) width 21: "<!--" + text run at (20,0) width 1: " " + text run at (0,13) width 114: "This should be part of" + text run at (113,13) width 5: " " + text run at (0,26) width 66: "the textarea." + text run at (65,26) width 1: " " + LayoutBR {BR} at (0,39) size 0x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/border-radius-clip-content-edge-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/border-radius-clip-content-edge-expected.png deleted file mode 100644 index a1c0a0c..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/border-radius-clip-content-edge-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/replaced-breaking-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/replaced-breaking-expected.png new file mode 100644 index 0000000..c7a393e8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/replaced-breaking-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/replaced-breaking-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/replaced-breaking-expected.txt new file mode 100644 index 0000000..e27ac40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/replaced-breaking-expected.txt
@@ -0,0 +1,80 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {DIV} at (0,0) size 32x474 [border: (1px solid #FF0000)] + LayoutTextControl {INPUT} at (1,1) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] + LayoutTextControl {INPUT} at (1,20) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] + LayoutText {#text} at (0,0) size 0x0 + LayoutImage {IMG} at (1,39) size 27x27 [border: (1px solid #000000)] + LayoutImage {IMG} at (1,66) size 27x27 [border: (1px solid #000000)] + LayoutText {#text} at (0,0) size 0x0 + LayoutButton {INPUT} at (1,93) size 42.25x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 26.25x13 + LayoutText {#text} at (0,0) size 27x13 + text run at (0,0) width 27: "input" + LayoutButton {INPUT} at (1,111) size 42.25x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 26.25x13 + LayoutText {#text} at (0,0) size 27x13 + text run at (0,0) width 27: "input" + LayoutText {#text} at (0,0) size 0x0 + LayoutButton {BUTTON} at (1,129) size 50.02x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 34.02x13 + LayoutText {#text} at (0,0) size 34x13 + text run at (0,0) width 34: "button" + LayoutButton {BUTTON} at (1,147) size 50.02x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 34.02x13 + LayoutText {#text} at (0,0) size 34x13 + text run at (0,0) width 34: "button" + LayoutText {#text} at (0,0) size 0x0 + LayoutMenuList {SELECT} at (1,165) size 63x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 63x18 + LayoutText (anonymous) at (8,2) size 32x13 + text run at (8,2) width 32: "select" + LayoutMenuList {SELECT} at (1,183) size 63x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 63x18 + LayoutText (anonymous) at (8,2) size 32x13 + text run at (8,2) width 32: "select" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {INPUT} at (3.89,294) size 12x12 + LayoutBlockFlow {INPUT} at (3.89,312) size 12x12 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {INPUT} at (3.89,330) size 12x13 + LayoutBlockFlow {INPUT} at (3.89,349) size 12x13 + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 +layer at (12,12) size 125x13 + LayoutBlockFlow {DIV} at (3,3) size 125x13 +layer at (12,31) size 125x13 + LayoutBlockFlow {DIV} at (3,3) size 125x13 +layer at (9,209) size 48x45 clip at (10,210) size 35x43 + LayoutListBox {SELECT} at (1,201.44) size 48.36x44.56 [bgcolor=#FFFFFF] [border: (1px solid #999999)] + LayoutBlockFlow {OPTION} at (1,1) size 35.36x14.19 + LayoutText {#text} at (2,0) size 32x13 + text run at (2,0) width 32: "select" +layer at (9,254) size 48x45 clip at (10,255) size 35x43 + LayoutListBox {SELECT} at (1,246.44) size 48.36x44.56 [bgcolor=#FFFFFF] [border: (1px solid #999999)] + LayoutBlockFlow {OPTION} at (1,1) size 35.36x14.19 + LayoutText {#text} at (2,0) size 32x13 + text run at (2,0) width 32: "select" +layer at (9,373) size 27x27 + LayoutIFrame {IFRAME} at (1,365) size 27x27 [border: (1px solid #000000)] + layer at (0,0) size 25x25 + LayoutView at (0,0) size 25x25 + layer at (0,0) size 25x25 + LayoutBlockFlow {HTML} at (0,0) size 25x25 + LayoutBlockFlow {BODY} at (8,8) size 9x9 +layer at (9,400) size 27x27 + LayoutIFrame {IFRAME} at (1,392) size 27x27 [border: (1px solid #000000)] + layer at (0,0) size 25x25 + LayoutView at (0,0) size 25x25 + layer at (0,0) size 25x25 + LayoutBlockFlow {HTML} at (0,0) size 25x25 + LayoutBlockFlow {BODY} at (8,8) size 9x9 +layer at (9,427) size 27x27 + LayoutEmbeddedObject {EMBED} at (1,419) size 27x27 [border: (1px solid #000000)] +layer at (9,454) size 27x27 + LayoutEmbeddedObject {EMBED} at (1,446) size 27x27 [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/replaced-breaking-mixture-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/replaced-breaking-mixture-expected.png new file mode 100644 index 0000000..c169fca64 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/replaced-breaking-mixture-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/width100percent-button-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/width100percent-button-expected.png new file mode 100644 index 0000000..d34ac90b --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/replaced/width100percent-button-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/selectors/064-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/selectors/064-expected.txt new file mode 100644 index 0000000..6df64fd8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/selectors/064-expected.txt
@@ -0,0 +1,17 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x85 + LayoutBlockFlow {HTML} at (0,0) size 800x85 + LayoutBlockFlow {BODY} at (8,16) size 784x53 + LayoutBlockFlow {DIV} at (0,0) size 784x53 + LayoutBlockFlow {P} at (0,0) size 784x18 [color=#00FF00] + LayoutInline {A} at (0,0) size 286x18 [color=#000000] + LayoutText {#text} at (0,0) size 286x18 + text run at (0,0) width 286: "This text should turn green while it is active." + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {P} at (0,34) size 784x19 [color=#00FF00] + LayoutButton {BUTTON} at (0,1) size 244.48x18 [color=#000000] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 228.48x13 + LayoutText {#text} at (0,0) size 229x13 + text run at (0,0) width 229: "This text should turn green while it is active." + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/spatial-navigation/snav-multiple-select-focusring-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/spatial-navigation/snav-multiple-select-focusring-expected.txt new file mode 100644 index 0000000..57963a0c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/spatial-navigation/snav-multiple-select-focusring-expected.txt
@@ -0,0 +1,15 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x75 + LayoutBlockFlow {HTML} at (0,0) size 800x75 + LayoutBlockFlow {BODY} at (8,8) size 784x59 + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 +layer at (8,8) size 352x59 clip at (9,9) size 339x57 + LayoutListBox {SELECT} at (0,0.25) size 352x58.75 [bgcolor=#FFFFFF] [border: (1px solid #999999)] + LayoutBlockFlow {OPTION} at (1,1) size 339x14.19 [color=#FFFFFF] [bgcolor=#0069D9] + LayoutText {#text} at (2,0) size 335x13 + text run at (2,0) width 335: "make-the-item-long-enough-to-make-a-difference-in-pixel-test" + LayoutBlockFlow {OPTION} at (1,15.19) size 339x14.19 + LayoutText {#text} at (2,0) size 7x13 + text run at (2,0) width 7: "b"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/append-cells2-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/append-cells2-expected.png new file mode 100644 index 0000000..e4dc8ed --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/append-cells2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/append-cells2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/append-cells2-expected.txt new file mode 100644 index 0000000..9682756 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/append-cells2-expected.txt
@@ -0,0 +1,89 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {P} at (0,0) size 784x18 + LayoutText {#text} at (0,0) size 465x18 + text run at (0,0) width 465: "Rows should have different number of columns, but those should match." + LayoutTable {TABLE} at (0,34) size 725x90 + LayoutTableSection {THEAD} at (0,0) size 725x18 + LayoutTableRow {TR} at (0,0) size 725x18 + LayoutTableCell {TD} at (0,0) size 90x18 [bgcolor=#7CFC00] [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "1" + LayoutTableCell {TD} at (90,0) size 90x18 [bgcolor=#008000] [r=0 c=1 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "1+" + LayoutTableCell {TD} at (180,0) size 90x18 [bgcolor=#00FFFF] [r=0 c=2 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "2" + LayoutTableCell {TD} at (270,0) size 91x18 [bgcolor=#008B8B] [r=0 c=3 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "2+" + LayoutTableCell {TD} at (361,0) size 91x18 [bgcolor=#FFFF00] [r=0 c=4 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "3" + LayoutTableCell {TD} at (452,0) size 91x18 [bgcolor=#FFD700] [r=0 c=5 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "3+" + LayoutTableSection {TFOOT} at (0,72) size 725x18 + LayoutTableRow {TR} at (0,0) size 725x18 + LayoutTableCell {TD} at (0,0) size 90x18 [bgcolor=#7CFC00] [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "1" + LayoutTableCell {TD} at (90,0) size 90x18 [bgcolor=#008000] [r=0 c=1 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "1+" + LayoutTableCell {TD} at (180,0) size 90x18 [bgcolor=#00FFFF] [r=0 c=2 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "2" + LayoutTableCell {TD} at (270,0) size 91x18 [bgcolor=#008B8B] [r=0 c=3 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "2+" + LayoutTableCell {TD} at (361,0) size 91x18 [bgcolor=#FFFF00] [r=0 c=4 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "3" + LayoutTableCell {TD} at (452,0) size 91x18 [bgcolor=#FFD700] [r=0 c=5 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "3+" + LayoutTableCell {TD} at (543,0) size 91x18 [bgcolor=#FFA500] [r=0 c=6 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "4" + LayoutTableCell {TD} at (634,0) size 91x18 [bgcolor=#FF8C00] [r=0 c=7 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "4+" + LayoutTableSection {TBODY} at (0,18) size 725x54 + LayoutTableRow {TR} at (0,0) size 725x18 + LayoutTableCell {TD} at (0,0) size 90x18 [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 4x18 + text run at (0,0) width 4: " " + LayoutTableRow {TR} at (0,18) size 725x18 + LayoutTableCell {TD} at (0,18) size 90x18 [bgcolor=#7CFC00] [r=1 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "1" + LayoutTableCell {TD} at (90,18) size 90x18 [bgcolor=#008000] [r=1 c=1 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "1+" + LayoutTableCell {TD} at (180,18) size 90x18 [bgcolor=#00FFFF] [r=1 c=2 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "2" + LayoutTableCell {TD} at (270,18) size 91x18 [bgcolor=#008B8B] [r=1 c=3 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "2+" + LayoutTableRow {TR} at (0,36) size 725x18 + LayoutTableCell {TD} at (0,36) size 90x18 [r=2 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 4x18 + text run at (0,0) width 4: " " + LayoutBlockFlow (anonymous) at (0,124) size 784x19 + LayoutButton {BUTTON} at (0,1) size 43.09x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 27.09x13 + LayoutText {#text} at (0,0) size 28x13 + text run at (0,0) width 28: "show" + LayoutText {#text} at (43,0) size 5x18 + text run at (43,0) width 5: " " + LayoutButton {BUTTON} at (47.09,1) size 38.28x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 22.28x13 + LayoutText {#text} at (0,0) size 23x13 + text run at (0,0) width 23: "hide" + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/remove-td-display-none-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/remove-td-display-none-expected.png new file mode 100644 index 0000000..3a976f7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/remove-td-display-none-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/remove-td-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/remove-td-display-none-expected.txt new file mode 100644 index 0000000..10aa5119 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/remove-td-display-none-expected.txt
@@ -0,0 +1,66 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {P} at (0,0) size 784x18 + LayoutText {#text} at (0,0) size 307x18 + text run at (0,0) width 307: "Both rows should have the same width (725px)." + LayoutTable {TABLE} at (0,34) size 725x36 + LayoutTableSection {TBODY} at (0,0) size 725x36 + LayoutTableRow {TR} at (0,0) size 725x18 + LayoutTableCell {TD} at (0,0) size 90x18 [bgcolor=#7CFC00] [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "1" + LayoutTableCell {TD} at (90,0) size 90x18 [bgcolor=#008000] [r=0 c=1 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "1+" + LayoutTableCell {TD} at (180,0) size 90x18 [bgcolor=#00FFFF] [r=0 c=2 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "2" + LayoutTableCell {TD} at (270,0) size 91x18 [bgcolor=#008B8B] [r=0 c=3 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "2+" + LayoutTableCell {TD} at (361,0) size 91x18 [bgcolor=#FFFF00] [r=0 c=4 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "3" + LayoutTableCell {TD} at (452,0) size 91x18 [bgcolor=#FFD700] [r=0 c=5 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "3+" + LayoutTableCell {TD} at (543,0) size 91x18 [bgcolor=#FFA500] [r=0 c=6 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "4" + LayoutTableCell {TD} at (634,0) size 91x18 [bgcolor=#FF8C00] [r=0 c=7 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "4+" + LayoutTableRow {TR} at (0,18) size 725x18 + LayoutTableCell {TD} at (0,18) size 90x18 [r=1 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 4x18 + text run at (0,0) width 4: " " + LayoutTable {TABLE} at (0,70) size 725x18 + LayoutTableSection {TBODY} at (0,0) size 725x18 + LayoutTableRow {TR} at (0,0) size 725x18 + LayoutTableCell {TD} at (0,0) size 181x18 [bgcolor=#7CFC00] [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "1" + LayoutTableCell {TD} at (181,0) size 181x18 [bgcolor=#00FFFF] [r=0 c=1 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "2" + LayoutTableCell {TD} at (362,0) size 181x18 [bgcolor=#FFFF00] [r=0 c=2 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "3" + LayoutTableCell {TD} at (543,0) size 182x18 [bgcolor=#FFA500] [r=0 c=3 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "4" + LayoutBlockFlow (anonymous) at (0,88) size 784x19 + LayoutButton {BUTTON} at (0,1) size 43.09x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 27.09x13 + LayoutText {#text} at (0,0) size 28x13 + text run at (0,0) width 28: "show" + LayoutText {#text} at (43,0) size 5x18 + text run at (43,0) width 5: " " + LayoutButton {BUTTON} at (47.09,1) size 38.28x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 22.28x13 + LayoutText {#text} at (0,0) size 23x13 + text run at (0,0) width 23: "hide" + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/spanOverlapRepaint-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/spanOverlapRepaint-expected.png new file mode 100644 index 0000000..1f54639 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/table/spanOverlapRepaint-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/color-emoji-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/color-emoji-expected.png new file mode 100644 index 0000000..6759624 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/color-emoji-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/complex-preferred-logical-widths-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/complex-preferred-logical-widths-expected.png new file mode 100644 index 0000000..fa2211a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/complex-preferred-logical-widths-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/drawBidiText-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/drawBidiText-expected.png new file mode 100644 index 0000000..0757e0a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/drawBidiText-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/emoticons-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/emoticons-expected.png new file mode 100644 index 0000000..dba363d --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/emoticons-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/emphasis-complex-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/emphasis-complex-expected.png new file mode 100644 index 0000000..1a27a0c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/emphasis-complex-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/font-fallback-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/font-fallback-expected.png new file mode 100644 index 0000000..ccaae1aa --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/font-fallback-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/font-fallback-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/font-fallback-expected.txt new file mode 100644 index 0000000..6ca96f6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/font-fallback-expected.txt
@@ -0,0 +1,61 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x217 + LayoutBlockFlow {HTML} at (0,0) size 800x217 + LayoutBlockFlow {BODY} at (8,8) size 784x201 + LayoutBlockFlow {DIV} at (0,0) size 784x21 + LayoutBlockFlow {SPAN} at (0,1) size 160x18 + LayoutText {#text} at (0,0) size 48x18 + text run at (0,0) width 48: "Arabic:" + LayoutText {#text} at (160,1) size 91x18 + text run at (160,1) width 4: " " + text run at (164,1) width 83 RTL: "\x{627}\x{644}\x{623}\x{64E}\x{628}\x{652}\x{62C}\x{64E}\x{62F}\x{650}\x{64A}\x{64E}\x{651}\x{629} \x{627}\x{644}\x{639}\x{64E}\x{631}\x{64E}\x{628}\x{650}\x{64A}\x{64E}\x{651}\x{629}" + text run at (246,1) width 5: " \x{200E}" + LayoutBlockFlow {DIV} at (0,21) size 784x18 + LayoutBlockFlow {SPAN} at (0,0) size 160x18 + LayoutText {#text} at (0,0) size 69x18 + text run at (0,0) width 69: "Armenian:" + LayoutText {#text} at (160,0) size 164x18 + text run at (160,0) width 164: " \x{540}\x{561}\x{575}\x{578}\x{581} \x{563}\x{580}\x{565}\x{580} Hayots grer" + LayoutBlockFlow {DIV} at (0,39) size 784x20 + LayoutBlockFlow {SPAN} at (0,0) size 160x18 + LayoutText {#text} at (0,0) size 66x18 + text run at (0,0) width 66: "Cherokee:" + LayoutText {#text} at (160,0) size 92x18 + text run at (160,0) width 92: " \x{13A2}\x{13E3}\x{13B5}\x{13CD}\x{13A0}\x{13C1}\x{13D7}" + LayoutBlockFlow {DIV} at (0,59) size 784x25 + LayoutBlockFlow {SPAN} at (0,4) size 160x18 + LayoutText {#text} at (0,0) size 79x18 + text run at (0,0) width 79: "Devanagari:" + LayoutText {#text} at (160,4) size 51x18 + text run at (160,4) width 51: " \x{926}\x{947}\x{935}\x{928}\x{93E}\x{917}\x{930}\x{940}" + LayoutBlockFlow {DIV} at (0,84) size 784x25 + LayoutBlockFlow {SPAN} at (0,4) size 160x18 + LayoutText {#text} at (0,0) size 71x18 + text run at (0,0) width 71: "Gurmukhi:" + LayoutText {#text} at (160,4) size 30x18 + text run at (160,4) width 30: " \x{A26}\x{A3F}\x{A32}" + LayoutBlockFlow {DIV} at (0,109) size 784x29 + LayoutBlockFlow {SPAN} at (0,2) size 160x18 + LayoutText {#text} at (0,0) size 49x18 + text run at (0,0) width 49: "Khmer:" + LayoutText {#text} at (160,2) size 51x18 + text run at (160,2) width 51: " \x{17A2}\x{1780}\x{17D2}\x{179F}\x{179A}\x{1781}\x{17D2}\x{1798}\x{17C2}\x{179A};" + LayoutBlockFlow {DIV} at (0,138) size 784x19 + LayoutBlockFlow {SPAN} at (0,0) size 160x18 + LayoutText {#text} at (0,0) size 52x18 + text run at (0,0) width 52: "Hangul:" + LayoutText {#text} at (160,0) size 320x18 + text run at (160,0) width 320: " \x{3131} \x{3134} \x{3137} \x{3139} \x{3141} \x{3142} \x{3145} \x{3181} \x{314B} \x{314C} \x{314D} \x{3148} \x{314A} \x{317F} \x{3147} \x{314E}" + LayoutBlockFlow {DIV} at (0,157) size 784x22 + LayoutBlockFlow {SPAN} at (0,3) size 160x18 + LayoutText {#text} at (0,0) size 75x18 + text run at (0,0) width 75: "Mongolian:" + LayoutText {#text} at (160,3) size 87x18 + text run at (160,3) width 87: " \x{182E}\x{1823}\x{1829}\x{182D}\x{1823}\x{182F}\x{182A}\x{1822}\x{1834}\x{1822}\x{182D}" + LayoutBlockFlow {DIV} at (0,179) size 784x22 + LayoutBlockFlow {SPAN} at (0,3) size 160x18 + LayoutText {#text} at (0,0) size 69x18 + text run at (0,0) width 69: "Glagolitic:" + LayoutText {#text} at (160,3) size 68x18 + text run at (160,3) width 68: " \x{2C09}\x{2C0A}\x{2C1F}\x{2C09}"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/font-ligature-letter-spacing-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/font-ligature-letter-spacing-expected.txt deleted file mode 100644 index 399ab86..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/font-ligature-letter-spacing-expected.txt +++ /dev/null
@@ -1,7 +0,0 @@ -This is a testharness.js-based test. -Harness Error. harness_status.status = 1 , harness_status.message = 1 duplicate test name: "Ligature expected not to be applied due to letter spacing." -FAIL Ligature expected not to be applied due to letter spacing. assert_equals: Ligature not applied due to letter spacing. expected 282.96875 but got 138.359375 -FAIL Ligature expected not to be applied due to letter spacing. assert_equals: Ligature not applied due to letter spacing. expected 282.96875 but got 138.359375 -PASS Non-ligature font feature expected to be applied despite letter spacing. -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/bidi-listbox-atsui-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/bidi-listbox-atsui-expected.png new file mode 100644 index 0000000..b515f857 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/bidi-listbox-atsui-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/bidi-listbox-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/bidi-listbox-expected.png new file mode 100644 index 0000000..8ac648c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/bidi-listbox-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/lang-glyph-cache-separation-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/lang-glyph-cache-separation-expected.png new file mode 100644 index 0000000..31e8374 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/lang-glyph-cache-separation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/unicode-bidi-plaintext-in-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/unicode-bidi-plaintext-in-textarea-expected.png new file mode 100644 index 0000000..1b3db5c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/international/unicode-bidi-plaintext-in-textarea-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/justify-ideograph-complex-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/justify-ideograph-complex-expected.png new file mode 100644 index 0000000..bed6952 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/justify-ideograph-complex-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/justify-ideograph-simple-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/justify-ideograph-simple-expected.png new file mode 100644 index 0000000..bed6952 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/justify-ideograph-simple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/justify-ideograph-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/justify-ideograph-vertical-expected.png new file mode 100644 index 0000000..c8507602 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/justify-ideograph-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/midword-break-before-surrogate-pair-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/midword-break-before-surrogate-pair-expected.png new file mode 100644 index 0000000..d7e2c97 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/midword-break-before-surrogate-pair-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/textIteratorNilRenderer-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/textIteratorNilRenderer-expected.png new file mode 100644 index 0000000..0285790 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/textIteratorNilRenderer-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/textIteratorNilRenderer-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/textIteratorNilRenderer-expected.txt new file mode 100644 index 0000000..3511d12 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/textIteratorNilRenderer-expected.txt
@@ -0,0 +1,34 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {CENTER} at (0,0) size 784x53 + LayoutBlockFlow {FORM} at (0,0) size 784x19 + LayoutTable {TABLE} at (64,0) size 656x19 + LayoutTableSection {TBODY} at (0,0) size 656x19 + LayoutTableRow {TR} at (0,0) size 656x19 + LayoutTableCell {TD} at (0,0) size 150x18 [r=0 c=0 rs=2 cs=1] + LayoutText {#text} at (0,0) size 4x18 + text run at (0,0) width 4: " " + LayoutTableCell {TD} at (150,0) size 251x19 [r=0 c=1 rs=1 cs=1] + LayoutTextControl {INPUT} at (0,0) size 251x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] + LayoutText {#text} at (0,0) size 0x0 + LayoutTableCell {TD} at (401,0) size 95x18 [r=0 c=2 rs=1 cs=1] + LayoutButton {INPUT} at (0,0) size 94.27x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 78.27x13 + LayoutText {#text} at (0,0) size 79x13 + text run at (0,0) width 79: "Search Froogle" + LayoutText {#text} at (0,0) size 0x0 + LayoutTableCell {TD} at (496,0) size 160x18 [r=0 c=3 rs=2 cs=1] + LayoutInline {LABEL} at (0,0) size 116x13 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {INPUT} at (12.89,3) size 12x12 + LayoutText {#text} at (27,3) size 99x13 + text run at (27,3) width 99: " Remember this location" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (anonymous) at (0,35) size 784x18 + LayoutBR {BR} at (392,0) size 0x18 +layer at (225,11) size 245x13 + LayoutBlockFlow {DIV} at (3,3) size 245x13 +caret: position 1 of child 0 {#text} of child 1 {TD} of child 0 {TR} of child 1 {TBODY} of child 1 {TABLE} of child 1 {FORM} of child 1 {CENTER} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/unicode-fallback-font-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/unicode-fallback-font-expected.png new file mode 100644 index 0000000..62b09ba --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/unicode-fallback-font-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/unicode-fallback-font-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/unicode-fallback-font-expected.txt new file mode 100644 index 0000000..05489ab --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/unicode-fallback-font-expected.txt
@@ -0,0 +1,144 @@ +layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 1246 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 785x1246 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutBlockFlow {HTML} at (0,0) size 785x1245.88 + LayoutBlockFlow {BODY} at (8,21.44) size 769x1208.44 + LayoutBlockFlow {H1} at (0,0) size 769x37 + LayoutText {#text} at (0,0) size 236x37 + text run at (0,0) width 236: "Unicode Symbols" + LayoutBlockFlow {PRE} at (0,58.44) size 769x1098 + LayoutText {#text} at (0,0) size 411x105 + text run at (0,0) width 0: " " + text run at (0,15) width 411: "U+16Ax \x{16A0} \x{16A1} \x{16A2} \x{16A3} \x{16A4} \x{16A5} \x{16A6} \x{16A7} \x{16A8} \x{16A9} \x{16AA} \x{16AB} \x{16AC} \x{16AD} \x{16AE} \x{16AF}" + text run at (410,15) width 1: " " + text run at (0,30) width 411: "U+16Bx \x{16B0} \x{16B1} \x{16B2} \x{16B3} \x{16B4} \x{16B5} \x{16B6} \x{16B7} \x{16B8} \x{16B9} \x{16BA} \x{16BB} \x{16BC} \x{16BD} \x{16BE} \x{16BF}" + text run at (410,30) width 1: " " + text run at (0,45) width 411: "U+16Cx \x{16C0} \x{16C1} \x{16C2} \x{16C3} \x{16C4} \x{16C5} \x{16C6} \x{16C7} \x{16C8} \x{16C9} \x{16CA} \x{16CB} \x{16CC} \x{16CD} \x{16CE} \x{16CF}" + text run at (410,45) width 1: " " + text run at (0,60) width 411: "U+16Dx \x{16D0} \x{16D1} \x{16D2} \x{16D3} \x{16D4} \x{16D5} \x{16D6} \x{16D7} \x{16D8} \x{16D9} \x{16DA} \x{16DB} \x{16DC} \x{16DD} \x{16DE} \x{16DF}" + text run at (410,60) width 1: " " + text run at (0,75) width 411: "U+16Ex \x{16E0} \x{16E1} \x{16E2} \x{16E3} \x{16E4} \x{16E5} \x{16E6} \x{16E7} \x{16E8} \x{16E9} \x{16EA} \x{16EB} \x{16EC} \x{16ED} \x{16EE} \x{16EF}" + text run at (410,75) width 1: " " + text run at (0,90) width 70: "U+16Fx \x{16F0}" + text run at (69,90) width 1: " " + LayoutText {#text} at (0,105) size 297x120 + text run at (0,105) width 0: " " + text run at (0,120) width 258: "U+200x \x{2000} \x{2001} \x{2002} \x{2003} \x{2004} \x{2004} \x{2004} \x{2004} \x{2004} \x{2009} \x{200A} \x{200B} \x{200C} \x{200D} \x{200E} " + text run at (257,120) width 1 RTL: "\x{200F}" + text run at (257,120) width 1: " " + text run at (0,135) width 297: "U+201x \x{2010} \x{2011} \x{2012} \x{2013} \x{2014} \x{2015} \x{2016} \x{2017} \x{2018} \x{2019} \x{201A} \x{201B} \x{201C} \x{201D} \x{201E} \x{201F}" + text run at (296,135) width 1: " " + text run at (0,150) width 196: "U+202x \x{2020} \x{2021} \x{2022} \x{2023} \x{2024} \x{2025} \x{2026} \x{2027} \x{2028} \x{2029} " + text run at (195,150) width 8: "\x{202A} " + text run at (202,150) width 9 RTL: "\x{202B} " + text run at (210,150) width 9: "\x{202C} " + text run at (218,150) width 9 LTR override: "\x{202D} " + text run at (226,150) width 1 RTL override: " " + text run at (226,150) width 16 RTL override: "\x{202E} \x{202F}" + text run at (0,165) width 297: "U+203x \x{2030} \x{2031} \x{2032} \x{2033} \x{2034} \x{2035} \x{2036} \x{2037} \x{2038} \x{2039} \x{203A} \x{203B} \x{203C} \x{203D} \x{203E} \x{203F}" + text run at (296,165) width 1: " " + text run at (0,180) width 297: "U+204x \x{2040} \x{2041} \x{2042} \x{2043} \x{2044} \x{2045} \x{2046} \x{2047} \x{2048} \x{2049} \x{204A} \x{204B} \x{204C} \x{204D} \x{204E} \x{204F}" + text run at (296,180) width 1: " " + text run at (0,195) width 297: "U+205x \x{2050} \x{2051} \x{2052} \x{2053} \x{2054} \x{2055} \x{2056} \x{2057} \x{2058} \x{2059} \x{205A} \x{205B} \x{205C} \x{205D} \x{205E} \x{205F}" + text run at (296,195) width 1: " " + text run at (0,210) width 133: "U+206x \x{2060} \x{2061} \x{2062} \x{2063} \x{2064} \x{206A} \x{206B} \x{206C} \x{206D} \x{206E} \x{206F}" + text run at (132,210) width 1: " " + LayoutText {#text} at (0,225) size 380x350 + text run at (0,225) width 0: " " + text run at (0,244) width 355: "U+260x \x{2600} \x{2601} \x{2602} \x{2603} \x{2604} \x{2605} \x{2606} \x{2607} \x{2608} \x{2609} \x{260A} \x{260B} \x{260C} \x{260D} \x{260E} \x{260F}" + text run at (354,244) width 1: " " + text run at (0,266) width 364: "U+261x \x{2610} \x{2611} \x{2612} \x{2613} \x{2614} \x{2615} \x{2616} \x{2617} \x{2618} \x{2619} \x{261A} \x{261B} \x{261C} \x{261D} \x{261E} \x{261F}" + text run at (363,266) width 1: " " + text run at (0,288) width 339: "U+262x \x{2620} \x{2621} \x{2622} \x{2623} \x{2624} \x{2625} \x{2626} \x{2627} \x{2628} \x{2629} \x{262A} \x{262B} \x{262C} \x{262D} \x{262E} \x{262F}" + text run at (338,288) width 1: " " + text run at (0,310) width 344: "U+263x \x{2630} \x{2631} \x{2632} \x{2633} \x{2634} \x{2635} \x{2636} \x{2637} \x{2638} \x{2639} \x{263A} \x{263B} \x{263C} \x{263D} \x{263E} \x{263F}" + text run at (343,310) width 1: " " + text run at (0,331) width 342: "U+264x \x{2640} \x{2641} \x{2642} \x{2643} \x{2644} \x{2645} \x{2646} \x{2647} \x{2648} \x{2649} \x{264A} \x{264B} \x{264C} \x{264D} \x{264E} \x{264F}" + text run at (341,331) width 1: " " + text run at (0,352) width 380: "U+265x \x{2650} \x{2651} \x{2652} \x{2653} \x{2654} \x{2655} \x{2656} \x{2657} \x{2658} \x{2659} \x{265A} \x{265B} \x{265C} \x{265D} \x{265E} \x{265F}" + text run at (379,352) width 1: " " + text run at (0,371) width 344: "U+266x \x{2660} \x{2661} \x{2662} \x{2663} \x{2664} \x{2665} \x{2666} \x{2667} \x{2668} \x{2669} \x{266A} \x{266B} \x{266C} \x{266D} \x{266E} \x{266F}" + text run at (343,371) width 1: " " + text run at (0,393) width 365: "U+267x \x{2670} \x{2671} \x{2672} \x{2673} \x{2674} \x{2675} \x{2676} \x{2677} \x{2678} \x{2679} \x{267A} \x{267B} \x{267C} \x{267D} \x{267E} \x{267F}" + text run at (364,393) width 1: " " + text run at (0,411) width 311: "U+268x \x{2680} \x{2681} \x{2682} \x{2683} \x{2684} \x{2685} \x{2686} \x{2687} \x{2688} \x{2689} \x{268A} \x{268B} \x{268C} \x{268D} \x{268E} \x{268F}" + text run at (311,411) width 0: " " + text run at (0,431) width 343: "U+269x \x{2690} \x{2691} \x{2692} \x{2693} \x{2694} \x{2695} \x{2696} \x{2697} \x{2698} \x{2699} \x{269A} \x{269B} \x{269C} \x{269D} \x{269E} \x{269F}" + text run at (342,431) width 1: " " + text run at (0,452) width 354: "U+26Ax \x{26A0} \x{26A1} \x{26A2} \x{26A3} \x{26A4} \x{26A5} \x{26A6} \x{26A7} \x{26A8} \x{26A9} \x{26AA} \x{26AB} \x{26AC} \x{26AD} \x{26AE} \x{26AF}" + text run at (353,452) width 1: " " + text run at (0,474) width 335: "U+26Bx \x{26B0} \x{26B1} \x{26B2} \x{26B3} \x{26B4} \x{26B5} \x{26B6} \x{26B7} \x{26B8} \x{26B9} \x{26BA} \x{26BB} \x{26BC} \x{26BD} \x{26BE} \x{26BF}" + text run at (334,474) width 1: " " + text run at (0,496) width 340: "U+26Cx \x{26C0} \x{26C1} \x{26C2} \x{26C3} \x{26C4} \x{26C5} \x{26C6} \x{26C7} \x{26C8} \x{26C9} \x{26CA} \x{26CB} \x{26CC} \x{26CD} \x{26CE} \x{26CF}" + text run at (339,496) width 1: " " + text run at (0,517) width 333: "U+26Dx \x{26D0} \x{26D1} \x{26D2} \x{26D3} \x{26D4} \x{26D5} \x{26D6} \x{26D7} \x{26D8} \x{26D9} \x{26DA} \x{26DB} \x{26DC} \x{26DD} \x{26DE} \x{26DF}" + text run at (332,517) width 1: " " + text run at (0,538) width 329: "U+26Ex \x{26E0} \x{26E1} \x{26E2} \x{26E3} \x{26E4} \x{26E5} \x{26E6} \x{26E7} \x{26E8} \x{26E9} \x{26EA} \x{26EB} \x{26EC} \x{26ED} \x{26EE} \x{26EF}" + text run at (328,538) width 1: " " + text run at (0,560) width 362: "U+26Fx \x{26F0} \x{26F1} \x{26F2} \x{26F3} \x{26F4} \x{26F5} \x{26F6} \x{26F7} \x{26F8} \x{26F9} \x{26FA} \x{26FB} \x{26FC} \x{26FD} \x{26FE} \x{26FF}" + text run at (361,560) width 1: " " + LayoutText {#text} at (0,577) size 361x229 + text run at (0,577) width 0: " " + text run at (0,596) width 361: "U+270x \x{2700} \x{2701} \x{2702} \x{2703} \x{2704} \x{2705} \x{2706} \x{2707} \x{2708} \x{2709} \x{270A} \x{270B} \x{270C} \x{270D} \x{270E} \x{270F}" + text run at (360,596) width 1: " " + text run at (0,613) width 326: "U+271x \x{2710} \x{2711} \x{2712} \x{2713} \x{2714} \x{2715} \x{2716} \x{2717} \x{2718} \x{2719} \x{271A} \x{271B} \x{271C} \x{271D} \x{271E} \x{271F}" + text run at (325,613) width 1: " " + text run at (0,632) width 338: "U+272x \x{2720} \x{2721} \x{2722} \x{2723} \x{2724} \x{2725} \x{2726} \x{2727} \x{2728} \x{2729} \x{272A} \x{272B} \x{272C} \x{272D} \x{272E} \x{272F}" + text run at (337,632) width 1: " " + text run at (0,649) width 330: "U+273x \x{2730} \x{2731} \x{2732} \x{2733} \x{2734} \x{2735} \x{2736} \x{2737} \x{2738} \x{2739} \x{273A} \x{273B} \x{273C} \x{273D} \x{273E} \x{273F}" + text run at (329,649) width 1: " " + text run at (0,668) width 337: "U+274x \x{2740} \x{2741} \x{2742} \x{2743} \x{2744} \x{2745} \x{2746} \x{2747} \x{2748} \x{2749} \x{274A} \x{274B} \x{274C} \x{274D} \x{274E} \x{274F}" + text run at (336,668) width 1: " " + text run at (0,689) width 312: "U+275x \x{2750} \x{2751} \x{2752} \x{2753} \x{2754} \x{2755} \x{2756} \x{2757} \x{2758} \x{2759} \x{275A} \x{275B} \x{275C} \x{275D} \x{275E} \x{275F}" + text run at (311,689) width 1: " " + text run at (0,706) width 284: "U+276x \x{2760} \x{2761} \x{2762} \x{2763} \x{2764} \x{2765} \x{2766} \x{2767} \x{2768} \x{2769} \x{276A} \x{276B} \x{276C} \x{276D} \x{276E} \x{276F}" + text run at (283,706) width 1: " " + text run at (0,721) width 300: "U+277x \x{2770} \x{2771} \x{2772} \x{2773} \x{2774} \x{2775} \x{2776} \x{2777} \x{2778} \x{2779} \x{277A} \x{277B} \x{277C} \x{277D} \x{277E} \x{277F}" + text run at (299,721) width 1: " " + text run at (0,736) width 336: "U+278x \x{2780} \x{2781} \x{2782} \x{2783} \x{2784} \x{2785} \x{2786} \x{2787} \x{2788} \x{2789} \x{278A} \x{278B} \x{278C} \x{278D} \x{278E} \x{278F}" + text run at (335,736) width 1: " " + text run at (0,755) width 354: "U+279x \x{2790} \x{2791} \x{2792} \x{2793} \x{2794} \x{2795} \x{2796} \x{2797} \x{2798} \x{2799} \x{279A} \x{279B} \x{279C} \x{279D} \x{279E} \x{279F}" + text run at (353,755) width 1: " " + text run at (0,772) width 346: "U+27Ax \x{27A0} \x{27A1} \x{27A2} \x{27A3} \x{27A4} \x{27A5} \x{27A6} \x{27A7} \x{27A8} \x{27A9} \x{27AA} \x{27AB} \x{27AC} \x{27AD} \x{27AE} \x{27AF}" + text run at (345,772) width 1: " " + text run at (0,791) width 357: "U+27Bx \x{27B0} \x{27B1} \x{27B2} \x{27B3} \x{27B4} \x{27B5} \x{27B6} \x{27B7} \x{27B8} \x{27B9} \x{27BA} \x{27BB} \x{27BC} \x{27BD} \x{27BE} \x{27BF}" + text run at (356,791) width 1: " " + LayoutText {#text} at (0,808) size 328x290 + text run at (0,808) width 0: " " + text run at (0,823) width 328: "U+2A0x \x{2A00} \x{2A01} \x{2A02} \x{2A03} \x{2A04} \x{2A05} \x{2A06} \x{2A07} \x{2A08} \x{2A09} \x{2A0A} \x{2A0B} \x{2A0C} \x{2A0D} \x{2A0E} \x{2A0F}" + text run at (327,823) width 1: " " + text run at (0,841) width 291: "U+2A1x \x{2A10} \x{2A11} \x{2A12} \x{2A13} \x{2A14} \x{2A15} \x{2A16} \x{2A17} \x{2A18} \x{2A19} \x{2A1A} \x{2A1B} \x{2A1C} \x{2A1D} \x{2A1E} \x{2A1F}" + text run at (290,841) width 1: " " + text run at (0,859) width 293: "U+2A2x \x{2A20} \x{2A21} \x{2A22} \x{2A23} \x{2A24} \x{2A25} \x{2A26} \x{2A27} \x{2A28} \x{2A29} \x{2A2A} \x{2A2B} \x{2A2C} \x{2A2D} \x{2A2E} \x{2A2F}" + text run at (292,859) width 1: " " + text run at (0,875) width 312: "U+2A3x \x{2A30} \x{2A31} \x{2A32} \x{2A33} \x{2A34} \x{2A35} \x{2A36} \x{2A37} \x{2A38} \x{2A39} \x{2A3A} \x{2A3B} \x{2A3C} \x{2A3D} \x{2A3E} \x{2A3F}" + text run at (311,875) width 1: " " + text run at (0,891) width 287: "U+2A4x \x{2A40} \x{2A41} \x{2A42} \x{2A43} \x{2A44} \x{2A45} \x{2A46} \x{2A47} \x{2A48} \x{2A49} \x{2A4A} \x{2A4B} \x{2A4C} \x{2A4D} \x{2A4E} \x{2A4F}" + text run at (286,891) width 1: " " + text run at (0,907) width 311: "U+2A5x \x{2A50} \x{2A51} \x{2A52} \x{2A53} \x{2A54} \x{2A55} \x{2A56} \x{2A57} \x{2A58} \x{2A59} \x{2A5A} \x{2A5B} \x{2A5C} \x{2A5D} \x{2A5E} \x{2A5F}" + text run at (310,907) width 1: " " + text run at (0,923) width 290: "U+2A6x \x{2A60} \x{2A61} \x{2A62} \x{2A63} \x{2A64} \x{2A65} \x{2A66} \x{2A67} \x{2A68} \x{2A69} \x{2A6A} \x{2A6B} \x{2A6C} \x{2A6D} \x{2A6E} \x{2A6F}" + text run at (289,923) width 1: " " + text run at (0,939) width 310: "U+2A7x \x{2A70} \x{2A71} \x{2A72} \x{2A73} \x{2A74} \x{2A75} \x{2A76} \x{2A77} \x{2A78} \x{2A79} \x{2A7A} \x{2A7B} \x{2A7C} \x{2A7D} \x{2A7E} \x{2A7F}" + text run at (309,939) width 1: " " + text run at (0,955) width 286: "U+2A8x \x{2A80} \x{2A81} \x{2A82} \x{2A83} \x{2A84} \x{2A85} \x{2A86} \x{2A87} \x{2A88} \x{2A89} \x{2A8A} \x{2A8B} \x{2A8C} \x{2A8D} \x{2A8E} \x{2A8F}" + text run at (285,955) width 1: " " + text run at (0,971) width 285: "U+2A9x \x{2A90} \x{2A91} \x{2A92} \x{2A93} \x{2A94} \x{2A95} \x{2A96} \x{2A97} \x{2A98} \x{2A99} \x{2A9A} \x{2A9B} \x{2A9C} \x{2A9D} \x{2A9E} \x{2A9F}" + text run at (284,971) width 1: " " + text run at (0,987) width 301: "U+2AAx \x{2AA0} \x{2AA1} \x{2AA2} \x{2AA3} \x{2AA4} \x{2AA5} \x{2AA6} \x{2AA7} \x{2AA8} \x{2AA9} \x{2AAA} \x{2AAB} \x{2AAC} \x{2AAD} \x{2AAE} \x{2AAF}" + text run at (300,987) width 1: " " + text run at (0,1003) width 295: "U+2ABx \x{2AB0} \x{2AB1} \x{2AB2} \x{2AB3} \x{2AB4} \x{2AB5} \x{2AB6} \x{2AB7} \x{2AB8} \x{2AB9} \x{2ABA} \x{2ABB} \x{2ABC} \x{2ABD} \x{2ABE} \x{2ABF}" + text run at (294,1003) width 1: " " + text run at (0,1019) width 286: "U+2ACx \x{2AC0} \x{2AC1} \x{2AC2} \x{2AC3} \x{2AC4} \x{2AC5} \x{2AC6} \x{2AC7} \x{2AC8} \x{2AC9} \x{2ACA} \x{2ACB} \x{2ACC} \x{2ACD} \x{2ACE} \x{2ACF}" + text run at (285,1019) width 1: " " + text run at (0,1035) width 293: "U+2ADx \x{2AD0} \x{2AD1} \x{2AD2} \x{2AD3} \x{2AD4} \x{2AD5} \x{2AD6} \x{2AD7} \x{2AD8} \x{2AD9} \x{2ADA} \x{2ADB} \x{2ADC} \x{2ADD} \x{2ADE} \x{2ADF}" + text run at (292,1035) width 1: " " + text run at (0,1051) width 303: "U+2AEx \x{2AE0} \x{2AE1} \x{2AE2} \x{2AE3} \x{2AE4} \x{2AE5} \x{2AE6} \x{2AE7} \x{2AE8} \x{2AE9} \x{2AEA} \x{2AEB} \x{2AEC} \x{2AED} \x{2AEE} \x{2AEF}" + text run at (302,1051) width 1: " " + text run at (0,1067) width 269: "U+2AFx \x{2AF0} \x{2AF1} \x{2AF2} \x{2AF3} \x{2AF4} \x{2AF5} \x{2AF6} \x{2AF7} \x{2AF8} \x{2AF9} \x{2AFA} \x{2AFB} \x{2AFC} \x{2AFD} \x{2AFE} \x{2AFF}" + text run at (268,1067) width 1: " " + text run at (0,1083) width 63: " " + LayoutBlockFlow {P} at (0,1172.44) size 769x36 + LayoutText {#text} at (0,0) size 764x36 + text run at (0,0) width 764: "A series of unicode symbols (Runic, General Punctuation, Miscellaneous Symbols, and Mathematical Symbols) should" + text run at (0,18) width 108: "be shown above."
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/updateNewFont-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/updateNewFont-expected.png new file mode 100644 index 0000000..953391e9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/updateNewFont-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/updateNewFont-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/updateNewFont-expected.txt new file mode 100644 index 0000000..2b16c6a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/text/updateNewFont-expected.txt
@@ -0,0 +1,11 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x128 + LayoutBlockFlow {HTML} at (0,0) size 800x128 + LayoutBlockFlow {BODY} at (8,8) size 784x112 + LayoutText {#text} at (0,0) size 0x0 +layer at (8,8) size 34x112 clip at (9,9) size 21x110 + LayoutListBox {SELECT} at (0,0.31) size 33.89x111.69 [bgcolor=#FFFFFF] [border: (1px solid #999999)] + LayoutBlockFlow {OPTION} at (1,1) size 20.89x12.19 + LayoutText {#text} at (2,0) size 17x11 + text run at (2,0) width 17: "test"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/writing-mode/text-combine-various-fonts-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/writing-mode/text-combine-various-fonts-expected.png new file mode 100644 index 0000000..129f53f --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/writing-mode/text-combine-various-fonts-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/writing-mode/text-combine-various-fonts-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/writing-mode/text-combine-various-fonts-expected.txt new file mode 100644 index 0000000..3fc93374 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/writing-mode/text-combine-various-fonts-expected.txt
@@ -0,0 +1,423 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (271,0) size 529x600 + LayoutBlockFlow {HTML} at (0,0) size 529x600 + LayoutBlockFlow {BODY} at (8,8) size 513x584 + LayoutBlockFlow {DIV} at (0,0) size 513x584 + LayoutBlockFlow {DIV} at (0,0) size 19x584 + LayoutText {#text} at (0,0) size 18x16 + text run at (0,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,16) size 18x16 + text run at (0,16) width 16: "1" + LayoutText {#text} at (0,32) size 18x16 + text run at (0,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,48) size 18x16 + text run at (0,48) width 16: "23" + LayoutText {#text} at (0,64) size 18x16 + text run at (0,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,80) size 18x16 + text run at (0,80) width 16: "2016" + LayoutText {#text} at (0,96) size 18x16 + text run at (0,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,112) size 18x16 + text run at (0,112) width 16: "45674567" + LayoutText {#text} at (0,128) size 18x16 + text run at (0,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (19,0) size 19x584 + LayoutText {#text} at (0,0) size 18x16 + text run at (0,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,16) size 18x16 + text run at (0,16) width 16: "1" + LayoutText {#text} at (0,32) size 18x16 + text run at (0,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,48) size 18x16 + text run at (0,48) width 16: "23" + LayoutText {#text} at (0,64) size 18x16 + text run at (0,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,80) size 18x16 + text run at (0,80) width 16: "2016" + LayoutText {#text} at (0,96) size 18x16 + text run at (0,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,112) size 18x16 + text run at (0,112) width 16: "45674567" + LayoutText {#text} at (0,128) size 18x16 + text run at (0,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (38,0) size 19x584 + LayoutText {#text} at (0,0) size 18x16 + text run at (0,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,16) size 18x16 + text run at (0,16) width 16: "1" + LayoutText {#text} at (0,32) size 18x16 + text run at (0,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,48) size 18x16 + text run at (0,48) width 16: "23" + LayoutText {#text} at (0,64) size 18x16 + text run at (0,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,80) size 18x16 + text run at (0,80) width 16: "2016" + LayoutText {#text} at (0,96) size 18x16 + text run at (0,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,112) size 18x16 + text run at (0,112) width 16: "45674567" + LayoutText {#text} at (0,128) size 18x16 + text run at (0,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (57,0) size 19x584 + LayoutText {#text} at (1,0) size 16x16 + text run at (1,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,16) size 16x16 + text run at (1,16) width 16: "1" + LayoutText {#text} at (1,32) size 16x16 + text run at (1,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,48) size 16x16 + text run at (1,48) width 16: "23" + LayoutText {#text} at (1,64) size 16x16 + text run at (1,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,80) size 16x16 + text run at (1,80) width 16: "2016" + LayoutText {#text} at (1,96) size 16x16 + text run at (1,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,112) size 16x16 + text run at (1,112) width 16: "45674567" + LayoutText {#text} at (1,128) size 16x16 + text run at (1,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (76,0) size 19x584 + LayoutText {#text} at (1,0) size 16x16 + text run at (1,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,16) size 16x16 + text run at (1,16) width 16: "1" + LayoutText {#text} at (1,32) size 16x16 + text run at (1,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,48) size 16x16 + text run at (1,48) width 16: "23" + LayoutText {#text} at (1,64) size 16x16 + text run at (1,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,80) size 16x16 + text run at (1,80) width 16: "2016" + LayoutText {#text} at (1,96) size 16x16 + text run at (1,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,112) size 16x16 + text run at (1,112) width 16: "45674567" + LayoutText {#text} at (1,128) size 16x16 + text run at (1,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (95,0) size 19x584 + LayoutText {#text} at (1,0) size 16x16 + text run at (1,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,16) size 16x16 + text run at (1,16) width 16: "1" + LayoutText {#text} at (1,32) size 16x16 + text run at (1,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,48) size 16x16 + text run at (1,48) width 16: "23" + LayoutText {#text} at (1,64) size 16x16 + text run at (1,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,80) size 16x16 + text run at (1,80) width 16: "2016" + LayoutText {#text} at (1,96) size 16x16 + text run at (1,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,112) size 16x16 + text run at (1,112) width 16: "45674567" + LayoutText {#text} at (1,128) size 16x16 + text run at (1,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (114,0) size 19x584 + LayoutText {#text} at (1,0) size 16x16 + text run at (1,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,16) size 16x16 + text run at (1,16) width 16: "1" + LayoutText {#text} at (1,32) size 16x16 + text run at (1,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,48) size 16x16 + text run at (1,48) width 16: "23" + LayoutText {#text} at (1,64) size 16x16 + text run at (1,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,80) size 16x16 + text run at (1,80) width 16: "2016" + LayoutText {#text} at (1,96) size 16x16 + text run at (1,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,112) size 16x16 + text run at (1,112) width 16: "45674567" + LayoutText {#text} at (1,128) size 16x16 + text run at (1,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (133,0) size 19x584 + LayoutText {#text} at (0,0) size 18x16 + text run at (0,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,16) size 18x16 + text run at (0,16) width 16: "1" + LayoutText {#text} at (0,32) size 18x16 + text run at (0,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,48) size 18x16 + text run at (0,48) width 16: "23" + LayoutText {#text} at (0,64) size 18x16 + text run at (0,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,80) size 18x16 + text run at (0,80) width 16: "2016" + LayoutText {#text} at (0,96) size 18x16 + text run at (0,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,112) size 18x16 + text run at (0,112) width 16: "45674567" + LayoutText {#text} at (0,128) size 18x16 + text run at (0,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (152,0) size 304x584 + LayoutBlockFlow {DIV} at (0,0) size 38x584 + LayoutText {#text} at (0,0) size 37x32 + text run at (0,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,32) size 37x32 + text run at (0,32) width 32: "1" + LayoutText {#text} at (0,64) size 37x32 + text run at (0,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,96) size 37x32 + text run at (0,96) width 32: "23" + LayoutText {#text} at (0,128) size 37x32 + text run at (0,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,160) size 37x32 + text run at (0,160) width 32: "2016" + LayoutText {#text} at (0,192) size 37x32 + text run at (0,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,224) size 37x32 + text run at (0,224) width 32: "45674567" + LayoutText {#text} at (0,256) size 37x32 + text run at (0,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (38,0) size 38x584 + LayoutText {#text} at (0,0) size 37x32 + text run at (0,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,32) size 37x32 + text run at (0,32) width 32: "1" + LayoutText {#text} at (0,64) size 37x32 + text run at (0,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,96) size 37x32 + text run at (0,96) width 32: "23" + LayoutText {#text} at (0,128) size 37x32 + text run at (0,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,160) size 37x32 + text run at (0,160) width 32: "2016" + LayoutText {#text} at (0,192) size 37x32 + text run at (0,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,224) size 37x32 + text run at (0,224) width 32: "45674567" + LayoutText {#text} at (0,256) size 37x32 + text run at (0,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (76,0) size 38x584 + LayoutText {#text} at (0,0) size 37x32 + text run at (0,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,32) size 37x32 + text run at (0,32) width 32: "1" + LayoutText {#text} at (0,64) size 37x32 + text run at (0,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,96) size 37x32 + text run at (0,96) width 32: "23" + LayoutText {#text} at (0,128) size 37x32 + text run at (0,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,160) size 37x32 + text run at (0,160) width 32: "2016" + LayoutText {#text} at (0,192) size 37x32 + text run at (0,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,224) size 37x32 + text run at (0,224) width 32: "45674567" + LayoutText {#text} at (0,256) size 37x32 + text run at (0,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (114,0) size 38x584 + LayoutText {#text} at (3,0) size 32x32 + text run at (3,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,32) size 32x32 + text run at (3,32) width 32: "1" + LayoutText {#text} at (3,64) size 32x32 + text run at (3,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,96) size 32x32 + text run at (3,96) width 32: "23" + LayoutText {#text} at (3,128) size 32x32 + text run at (3,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,160) size 32x32 + text run at (3,160) width 32: "2016" + LayoutText {#text} at (3,192) size 32x32 + text run at (3,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,224) size 32x32 + text run at (3,224) width 32: "45674567" + LayoutText {#text} at (3,256) size 32x32 + text run at (3,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (152,0) size 38x584 + LayoutText {#text} at (3,0) size 32x32 + text run at (3,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,32) size 32x32 + text run at (3,32) width 32: "1" + LayoutText {#text} at (3,64) size 32x32 + text run at (3,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,96) size 32x32 + text run at (3,96) width 32: "23" + LayoutText {#text} at (3,128) size 32x32 + text run at (3,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,160) size 32x32 + text run at (3,160) width 32: "2016" + LayoutText {#text} at (3,192) size 32x32 + text run at (3,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,224) size 32x32 + text run at (3,224) width 32: "45674567" + LayoutText {#text} at (3,256) size 32x32 + text run at (3,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (190,0) size 38x584 + LayoutText {#text} at (3,0) size 32x32 + text run at (3,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,32) size 32x32 + text run at (3,32) width 32: "1" + LayoutText {#text} at (3,64) size 32x32 + text run at (3,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,96) size 32x32 + text run at (3,96) width 32: "23" + LayoutText {#text} at (3,128) size 32x32 + text run at (3,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,160) size 32x32 + text run at (3,160) width 32: "2016" + LayoutText {#text} at (3,192) size 32x32 + text run at (3,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,224) size 32x32 + text run at (3,224) width 32: "45674567" + LayoutText {#text} at (3,256) size 32x32 + text run at (3,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (228,0) size 38x584 + LayoutText {#text} at (3,0) size 32x32 + text run at (3,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,32) size 32x32 + text run at (3,32) width 32: "1" + LayoutText {#text} at (3,64) size 32x32 + text run at (3,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,96) size 32x32 + text run at (3,96) width 32: "23" + LayoutText {#text} at (3,128) size 32x32 + text run at (3,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,160) size 32x32 + text run at (3,160) width 32: "2016" + LayoutText {#text} at (3,192) size 32x32 + text run at (3,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,224) size 32x32 + text run at (3,224) width 32: "45674567" + LayoutText {#text} at (3,256) size 32x32 + text run at (3,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (266,0) size 38x584 + LayoutText {#text} at (0,0) size 37x32 + text run at (0,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,32) size 37x32 + text run at (0,32) width 32: "1" + LayoutText {#text} at (0,64) size 37x32 + text run at (0,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,96) size 37x32 + text run at (0,96) width 32: "23" + LayoutText {#text} at (0,128) size 37x32 + text run at (0,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,160) size 37x32 + text run at (0,160) width 32: "2016" + LayoutText {#text} at (0,192) size 37x32 + text run at (0,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,224) size 37x32 + text run at (0,224) width 32: "45674567" + LayoutText {#text} at (0,256) size 37x32 + text run at (0,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (456,0) size 57x584 + LayoutBlockFlow {DIV} at (0,0) size 19x584 + LayoutText {#text} at (0,0) size 18x16 + text run at (0,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,16) size 18x16 + text run at (0,16) width 16: "1" + LayoutText {#text} at (0,32) size 18x16 + text run at (0,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,48) size 18x16 + text run at (0,48) width 16: "23" + LayoutText {#text} at (0,64) size 18x16 + text run at (0,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,80) size 18x16 + text run at (0,80) width 16: "2016" + LayoutText {#text} at (0,96) size 18x16 + text run at (0,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,112) size 18x16 + text run at (0,112) width 16: "45674567" + LayoutText {#text} at (0,128) size 18x16 + text run at (0,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (19,0) size 38x584 + LayoutBlockFlow {DIV} at (0,0) size 38x584 + LayoutText {#text} at (0,0) size 37x32 + text run at (0,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,32) size 37x32 + text run at (0,32) width 32: "1" + LayoutText {#text} at (0,64) size 37x32 + text run at (0,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,96) size 37x32 + text run at (0,96) width 32: "23" + LayoutText {#text} at (0,128) size 37x32 + text run at (0,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,160) size 37x32 + text run at (0,160) width 32: "2016" + LayoutText {#text} at (0,192) size 37x32 + text run at (0,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,224) size 37x32 + text run at (0,224) width 32: "45674567" + LayoutText {#text} at (0,256) size 37x32 + text run at (0,256) width 32: "\x{56FD}"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/basic/001-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/basic/001-expected.png new file mode 100644 index 0000000..b9409a0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/basic/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/float/float-avoidance-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/float/float-avoidance-expected.png new file mode 100644 index 0000000..4bd985d --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/float/float-avoidance-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/margin-collapse/103-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/margin-collapse/103-expected.txt new file mode 100644 index 0000000..9479e05f --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/margin-collapse/103-expected.txt
@@ -0,0 +1,183 @@ +layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 1707 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 785x1707 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutBlockFlow {HTML} at (0,0) size 785x1706.95 + LayoutBlockFlow {BODY} at (8,20) size 769x1666.95 [bgcolor=#A6A972] + LayoutBlockFlow {DIV} at (83.50,0) size 602x1666.95 [bgcolor=#FDFDE9] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (1,31) size 600x70 + LayoutBlockFlow {DIV} at (1,114.33) size 600x1480.63 + LayoutBlockFlow {P} at (20,0) size 560x80 [color=#333333] + LayoutText {#text} at (0,2) size 537x36 + text run at (0,2) width 537: "We are trying to understand how UVic students perform Shakespeare related research for" + text run at (0,22) width 272: "classes as well as for their own interest. The " + LayoutInline {A} at (0,0) size 179x16 + LayoutText {#text} at (271,22) size 179x16 + text run at (271,22) width 179: "Internet Shakespeare Editions" + LayoutText {#text} at (449,22) size 553x56 + text run at (449,22) width 61: " are being" + text run at (0,42) width 282: "developed for students as well as Shakespeare " + text run at (281,42) width 272: "scholars world wide to better understand the" + text run at (0,62) width 249: "man, his plays and our interpretations of " + text run at (248,62) width 37: "them." + LayoutBlockFlow {P} at (20,93.33) size 560x20 [color=#333333] + LayoutText {#text} at (0,2) size 475x16 + text run at (0,2) width 475: "Please take the time to carefully review and complete the following questions." + LayoutBlockFlow {FORM} at (20,138.33) size 560x1308.97 + LayoutBlockFlow {H2} at (0,0) size 560x16 [color=#333333] + LayoutText {#text} at (0,0) size 202x16 + text run at (0,0) width 202: "PERSONAL INFORMATION" + LayoutBlockFlow (floating) {SPAN} at (0,26) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 70x16 + text run at (0,2) width 70: "Your Name*" + LayoutTextControl {INPUT} at (325,26) size 186x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] + LayoutBlockFlow (floating) {SPAN} at (0,46) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 124x16 + text run at (0,2) width 124: "Your e-mail address*" + LayoutTextControl {INPUT} at (325,45) size 186x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] + LayoutBlockFlow (floating) {SPAN} at (0,66) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 131x16 + text run at (0,2) width 131: "Your degree program*" + LayoutMenuList {SELECT} at (325,64) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 86x13 + text run at (8,2) width 86: "Program options" + LayoutBlockFlow (floating) {SPAN} at (0,86) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 115x16 + text run at (0,2) width 115: "Your year of study*" + LayoutMenuList {SELECT} at (325,82) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 121x13 + text run at (8,2) width 121: "Years you've been here" + LayoutBlockFlow (floating) {SPAN} at (0,106) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 157x16 + text run at (0,2) width 157: "Shakespeare classes taken" + LayoutMenuList {SELECT} at (325,100) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 73x13 + text run at (8,2) width 73: "Number taken" + LayoutBlockFlow {P} at (0,131.33) size 560x20 [color=#333333] + LayoutText {#text} at (0,2) size 161x16 + text run at (0,2) width 161: "* indicates a required field" + LayoutBlockFlow {H2} at (0,176.33) size 560x16 [color=#333333] + LayoutText {#text} at (0,0) size 298x16 + text run at (0,0) width 298: "SHAKESPEARE RESEARCH QUESTIONS" + LayoutBlockFlow (floating) {SPAN} at (0,202.33) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 286x36 + text run at (0,2) width 286: "What percentage of your research time is spent" + text run at (0,22) width 42: "online?" + LayoutMenuList {SELECT} at (325,202.33) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 105x13 + text run at (8,2) width 105: "Percentages of time" + LayoutBlockFlow (floating) {SPAN} at (0,222.33) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 308x36 + text run at (0,2) width 308: "What is holding you back from doing more research" + text run at (0,22) width 42: "online?" + LayoutMenuList {SELECT} at (325,220.33) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 44x13 + text run at (8,2) width 44: "Reasons" + LayoutBlockFlow (floating) {SPAN} at (0,242.33) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 228x16 + text run at (0,2) width 228: "Your research is primarily focused on:" + LayoutBlockFlow {SPAN} at (325,238.33) size 180x20 [color=#333333] + LayoutBlockFlow {INPUT} at (2.95,4) size 12x13 [color=#000000] + LayoutText {#text} at (17,2) size 34x16 + text run at (17,2) width 34: "Texts" + LayoutBlockFlow {SPAN} at (325,258.33) size 180x20 [color=#333333] + LayoutBlockFlow {INPUT} at (2.95,4) size 12x13 [color=#000000] + LayoutText {#text} at (17,2) size 138x16 + text run at (17,2) width 138: "Performance materials" + LayoutBlockFlow {SPAN} at (325,278.33) size 180x20 [color=#333333] + LayoutBlockFlow {INPUT} at (2.95,4) size 12x13 [color=#000000] + LayoutText {#text} at (17,2) size 23x16 + text run at (17,2) width 23: "n/a" + LayoutBlockFlow {H2} at (0,323.33) size 560x16 [color=#333333] + LayoutText {#text} at (0,0) size 373x16 + text run at (0,0) width 373: "INTERNET SHAKESPEARE EDITIONS QUESTIONS" + LayoutBlockFlow (floating) {SPAN} at (0,349.33) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 312x16 + text run at (0,2) width 312: "Have you used UVic's Internet Shakespeare Editions?" + LayoutBlockFlow {SPAN} at (325,349.33) size 180x20 [color=#333333] + LayoutText {#text} at (0,2) size 21x16 + text run at (0,2) width 21: "Yes" + LayoutBlockFlow {INPUT} at (23.22,4) size 12x13 [color=#000000] + LayoutText {#text} at (38,2) size 20x16 + text run at (38,2) width 5: " " + text run at (42,2) width 16: "No" + LayoutBlockFlow {INPUT} at (60.80,4) size 12x13 [color=#000000] + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {P} at (0,382.66) size 560x20 [color=#333333] + LayoutText {#text} at (0,2) size 388x16 + text run at (0,2) width 388: "-- If you answered no to this question, skip to the next section --" + LayoutBlockFlow (floating) {SPAN} at (0,415.98) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 282x16 + text run at (0,2) width 282: "Which area of the ISE did you find most useful?" + LayoutMenuList {SELECT} at (325,415.98) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 99x13 + text run at (8,2) width 99: "Sections of the ISE" + LayoutBlockFlow (floating) {SPAN} at (0,435.98) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 257x16 + text run at (0,2) width 257: "How did you find the navigation of the ISE?" + LayoutMenuList {SELECT} at (325,433.98) size 180x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 180x18 + LayoutText (anonymous) at (8,2) size 90x13 + text run at (8,2) width 90: "Level of difficulty" + LayoutBlockFlow (floating) {SPAN} at (0,455.98) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 213x16 + text run at (0,2) width 213: "Please describe your use of the ISE." + LayoutBlockFlow {H2} at (0,607.98) size 560x16 [color=#333333] + LayoutText {#text} at (0,0) size 290x16 + text run at (0,0) width 290: "TOOLS IN DEVELOPMENT QUESTIONS" + LayoutBlockFlow {P} at (0,637.31) size 560x60 [color=#333333] + LayoutText {#text} at (0,2) size 554x56 + text run at (0,2) width 463: "We are in the process of both making new material available and developing " + text run at (462,2) width 75: "new tools to" + text run at (0,22) width 393: "view and extrapolate information from Shakespeare's works. The " + text run at (392,22) width 162: "following images are visual" + text run at (0,42) width 353: "representations of some of the ideas being thrown around." + LayoutBlockFlow {P} at (0,710.64) size 560x20 [color=#333333] + LayoutText {#text} at (0,2) size 347x16 + text run at (0,2) width 347: "Please review them carefully and provide feedback below" + LayoutBlockFlow (floating) {SPAN} at (0,743.97) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 149x16 + text run at (0,2) width 149: "Your comments on Fig. 1" + LayoutBlockFlow (floating) {SPAN} at (0,874.97) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 149x16 + text run at (0,2) width 149: "Your comments on Fig. 2" + LayoutBlockFlow (floating) {SPAN} at (0,1005.97) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 149x16 + text run at (0,2) width 149: "Your comments on Fig. 3" + LayoutBlockFlow {H2} at (0,1156.97) size 560x16 [color=#333333] + LayoutText {#text} at (0,0) size 143x16 + text run at (0,0) width 143: "OTHER FEEDBACK" + LayoutBlockFlow (floating) {SPAN} at (0,1182.97) size 325x20 [color=#333333] + LayoutText {#text} at (0,2) size 228x16 + text run at (0,2) width 228: "Please enter any other thoughts here." + LayoutBlockFlow {P} at (20,1460.63) size 560x20 [color=#333333] + LayoutText {#text} at (0,2) size 237x16 + text run at (0,2) width 237: "Thank you for your time filling this out." + LayoutBlockFlow {DIV} at (1,1614.95) size 600x51 [border: (1px dashed #A6A972) none] + LayoutBlockFlow {SPAN} at (0,16) size 600x20 [color=#333333] + LayoutText {#text} at (245,2) size 110x16 + text run at (245,2) width 110: "\x{A9}2003 Kevin Davis" +layer at (441,302) size 180x13 + LayoutBlockFlow {DIV} at (3,3) size 180x13 +layer at (441,321) size 180x13 + LayoutBlockFlow {DIV} at (3,3) size 180x13 +layer at (113,750) size 506x106 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutTextControl {TEXTAREA} at (0,476.98) size 506x106 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 500x13 +layer at (113,1037) size 506x106 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutTextControl {TEXTAREA} at (0,763.97) size 506x106 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 500x13 +layer at (113,1168) size 506x106 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutTextControl {TEXTAREA} at (0,894.97) size 506x106 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 500x13 +layer at (113,1299) size 506x106 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutTextControl {TEXTAREA} at (0,1025.97) size 506x106 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 500x13 +layer at (113,1476) size 506x106 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutTextControl {TEXTAREA} at (0,1202.97) size 506x106 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 500x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/positioning/047-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/positioning/047-expected.png new file mode 100644 index 0000000..f8ca3a3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/positioning/047-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/positioning/inline-block-relposition-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/positioning/inline-block-relposition-expected.png new file mode 100644 index 0000000..91df33ad5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/positioning/inline-block-relposition-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/positioning/inline-block-relposition-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/positioning/inline-block-relposition-expected.txt new file mode 100644 index 0000000..29097d9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/block/positioning/inline-block-relposition-expected.txt
@@ -0,0 +1,15 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x34 + LayoutBlockFlow {HTML} at (0,0) size 800x34 + LayoutBlockFlow {BODY} at (8,8) size 784x18 + LayoutText {#text} at (0,0) size 0x0 +layer at (8,8) size 100x18 + LayoutButton (relative positioned) {BUTTON} at (0,0) size 100x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 84x13 + LayoutText {#text} at (19,0) size 46x13 + text run at (19,0) width 46: "Click Me" +layer at (88,23) size 23x13 + LayoutBlockFlow (positioned) {DIV} at (80.03,15) size 22.97x13 + LayoutText {#text} at (0,0) size 23x13 + text run at (0,0) width 23: "Now"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusAllStylesAllCorners-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusAllStylesAllCorners-expected.png deleted file mode 100644 index add80dc..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusAllStylesAllCorners-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed01-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed01-expected.png deleted file mode 100644 index d0e1c1dd..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed01-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed02-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed02-expected.png deleted file mode 100644 index 197931b..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed02-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed03-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed03-expected.png deleted file mode 100644 index 93ad8819..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed03-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed04-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed04-expected.png deleted file mode 100644 index 6801ab8..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed04-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed05-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed05-expected.png deleted file mode 100644 index eb136ed4..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed05-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed06-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed06-expected.png deleted file mode 100644 index a33965f..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDashed06-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDotted01-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDotted01-expected.png deleted file mode 100644 index 803dd075..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDotted01-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDotted04-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDotted04-expected.png deleted file mode 100644 index ed9ed195..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/borderRadiusDotted04-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/inline-mask-overlay-image-outset-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/inline-mask-overlay-image-outset-expected.png new file mode 100644 index 0000000..2fe6dd9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/borders/inline-mask-overlay-image-outset-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-expected.png deleted file mode 100644 index f8ff6cb..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-subpixel-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-subpixel-expected.png deleted file mode 100644 index e127032..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/box-shadow/inset-subpixel-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css-generated-content/014-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css-generated-content/014-expected.png new file mode 100644 index 0000000..e60a978 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css-generated-content/014-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/acid2-pixel-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/acid2-pixel-expected.png new file mode 100644 index 0000000..e2836b18 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/acid2-pixel-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/continuationCrash-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/continuationCrash-expected.png new file mode 100644 index 0000000..a7b8227 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/continuationCrash-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/continuationCrash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/continuationCrash-expected.txt new file mode 100644 index 0000000..a209f0a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/continuationCrash-expected.txt
@@ -0,0 +1,66 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x576 + LayoutBlockFlow (anonymous) at (0,0) size 784x0 + LayoutInline {SPAN} at (0,0) size 0x0 + LayoutInline {SPAN} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {H4} at (0,0) size 784x18 + LayoutText {#text} at (0,0) size 83x18 + text run at (0,0) width 83: "Instructions" + LayoutBlockFlow {P} at (0,39.27) size 784x18 + LayoutText {#text} at (0,0) size 180x18 + text run at (0,0) width 180: "Click the following buttons." + LayoutBlockFlow {OL} at (0,73.27) size 784x163 + LayoutListItem {LI} at (40,0) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "1" + LayoutText {#text} at (0,0) size 199x18 + text run at (0,0) width 199: "Start with the outmost left one." + LayoutListItem {LI} at (40,18) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "2" + LayoutText {#text} at (0,0) size 138x18 + text run at (0,0) width 138: "Click the middle one." + LayoutListItem {LI} at (40,36) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "3" + LayoutText {#text} at (0,0) size 271x18 + text run at (0,0) width 271: "(The ouline will not be updated correctly.)" + LayoutListItem {LI} at (40,54) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "4" + LayoutText {#text} at (0,0) size 142x18 + text run at (0,0) width 142: "Click the right button." + LayoutListItem {LI} at (40,72) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "5" + LayoutText {#text} at (0,0) size 473x18 + text run at (0,0) width 473: "This will crash Safari 1.3 (v176 and v170, no other configurations tested)." + LayoutListItem {LI} at (40,90) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "6" + LayoutText {#text} at (0,0) size 300x18 + text run at (0,0) width 300: "The combination 2. 1. 3. will also crash Safari." + LayoutListItem {LI} at (40,108) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "7" + LayoutText {#text} at (0,0) size 457x18 + text run at (0,0) width 457: "1. 3. will not crash Safari. (But the outline should vanish. Shouldn't it?)" + LayoutListItem {LI} at (40,126) size 744x18 + LayoutListMarker (anonymous) at (-16,0) size 16x18: "8" + LayoutText {#text} at (0,0) size 205x18 + text run at (0,0) width 205: "2. 3. will not crash Safari either." + LayoutBlockFlow (anonymous) at (40,144) size 744x19 + LayoutButton {INPUT} at (0,1) size 130.53x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 114.53x13 + LayoutText {#text} at (0,0) size 115x13 + text run at (0,0) width 115: "1. Set outline property" + LayoutText {#text} at (130,0) size 5x18 + text run at (130,0) width 5: " " + LayoutButton {INPUT} at (134.53,1) size 133.58x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 117.58x13 + LayoutText {#text} at (0,0) size 118x13 + text run at (0,0) width 118: "2. Set display property" + LayoutText {#text} at (268,0) size 5x18 + text run at (268,0) width 5: " " + LayoutButton {INPUT} at (272.11,1) size 145.05x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 129.05x13 + LayoutText {#text} at (0,0) size 130x13 + text run at (0,0) width 130: "3. Replace span-element" + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/h1-in-section-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/h1-in-section-elements-expected.png new file mode 100644 index 0000000..12a1c5e5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/h1-in-section-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/input-search-padding-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/input-search-padding-expected.png new file mode 100644 index 0000000..fabc1455 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/input-search-padding-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/line-height-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/line-height-expected.txt new file mode 100644 index 0000000..b24c1f4e --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/line-height-expected.txt
@@ -0,0 +1,24 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {DIV} at (0,0) size 784x18 + LayoutText {#text} at (0,0) size 54x18 + text run at (0,0) width 54: "Test for " + LayoutInline {A} at (0,0) size 121x18 [color=#0000EE] + LayoutText {#text} at (53,0) size 121x18 + text run at (53,0) width 121: "Bugzilla Bug 9934" + LayoutText {#text} at (173,0) size 462x18 + text run at (173,0) width 462: " Selecting text in text field with {line-height:100%} causes it to bounce." + LayoutBlockFlow {DIV} at (0,18) size 784x19 + LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] + LayoutBlockFlow {DIV} at (0,37) size 784x36 + LayoutText {#text} at (0,0) size 749x36 + text run at (0,0) width 585: "Select the text in the text field using horizontal mouse movements, then drag up and down. " + text run at (584,0) width 165: "The text should not move" + text run at (0,18) width 64: "vertically." +layer at (11,29) size 125x13 + LayoutBlockFlow {DIV} at (3,3) size 125x13 + LayoutText {#text} at (0,0) size 67x13 + text run at (0,0) width 67: "Lorem Ipsum"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/margin-top-bottom-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/margin-top-bottom-dynamic-expected.txt new file mode 100644 index 0000000..a0b36ae --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/margin-top-bottom-dynamic-expected.txt
@@ -0,0 +1,71 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {P} at (0,0) size 784x18 + LayoutText {#text} at (0,0) size 256x18 + text run at (0,0) width 256: "What it should look like (positive case):" + LayoutBlockFlow {DIV} at (0,34) size 784x72 [border: (1px solid #008000)] + LayoutBlockFlow {DIV} at (1,11) size 782x20 [border: (1px solid #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow {DIV} at (1,41) size 782x20 [border: (1px dotted #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow {P} at (0,122) size 784x18 + LayoutText {#text} at (0,0) size 260x18 + text run at (0,0) width 260: "What it should look like (negative case):" + LayoutBlockFlow {DIV} at (0,156) size 784x32 [border: (1px solid #008000)] + LayoutBlockFlow {DIV} at (1,11) size 782x20 [border: (1px solid #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow {DIV} at (1,21) size 782x20 [border: (1px dotted #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow {P} at (0,204) size 784x18 + LayoutText {#text} at (0,0) size 380x18 + text run at (0,0) width 380: "Dynamic case (automatically testing positive --> negative):" + LayoutBlockFlow {DIV} at (0,238) size 784x32 [border: (1px solid #008000)] + LayoutBlockFlow {DIV} at (1,11) size 782x20 [border: (1px solid #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow {DIV} at (1,21) size 782x20 [border: (1px dotted #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow (anonymous) at (0,270) size 784x37 + LayoutBR {BR} at (0,0) size 0x18 + LayoutButton {INPUT} at (0,19) size 100.56x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 84.56x13 + LayoutText {#text} at (0,0) size 85x13 + text run at (0,0) width 85: "Negative margin" + LayoutText {#text} at (100,18) size 5x18 + text run at (100,18) width 5: " " + LayoutButton {INPUT} at (104.56,19) size 95.14x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 79.14x13 + LayoutText {#text} at (0,0) size 80x13 + text run at (0,0) width 80: "Positive margin" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {P} at (0,323) size 784x18 + LayoutText {#text} at (0,0) size 458x18 + text run at (0,0) width 458: "Dynamic case (automatically testing positive --> negative --> positive):" + LayoutBlockFlow {DIV} at (0,357) size 784x72 [border: (1px solid #008000)] + LayoutBlockFlow {DIV} at (1,11) size 782x20 [border: (1px solid #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow {DIV} at (1,41) size 782x20 [border: (1px dotted #0000FF)] + LayoutText {#text} at (1,1) size 86x18 + text run at (1,1) width 86: "Lorem ipsum" + LayoutBlockFlow (anonymous) at (0,429) size 784x37 + LayoutBR {BR} at (0,0) size 0x18 + LayoutButton {INPUT} at (0,19) size 100.56x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 84.56x13 + LayoutText {#text} at (0,0) size 85x13 + text run at (0,0) width 85: "Negative margin" + LayoutText {#text} at (100,18) size 5x18 + text run at (100,18) width 5: " " + LayoutButton {INPUT} at (104.56,19) size 95.14x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 79.14x13 + LayoutText {#text} at (0,0) size 80x13 + text run at (0,0) width 80: "Positive margin" + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/rem-calc-dynamic-scaling-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/rem-calc-dynamic-scaling-expected.png new file mode 100644 index 0000000..73d6433c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/rem-calc-dynamic-scaling-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/rem-dynamic-scaling-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/rem-dynamic-scaling-expected.png new file mode 100644 index 0000000..73d6433c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/css/rem-dynamic-scaling-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dnd/link-dragging-draggable-div-with-dragged-link-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dnd/link-dragging-draggable-div-with-dragged-link-expected.png new file mode 100644 index 0000000..57036e8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dnd/link-dragging-draggable-div-with-dragged-link-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dnd/link-dragging-non-draggable-link-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dnd/link-dragging-non-draggable-link-expected.png new file mode 100644 index 0000000..7c077df --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dnd/link-dragging-non-draggable-link-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLInputElement/input-image-alt-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLInputElement/input-image-alt-text-expected.png new file mode 100644 index 0000000..dcabc0e8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLInputElement/input-image-alt-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLInputElement/input-image-alt-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLInputElement/input-image-alt-text-expected.txt new file mode 100644 index 0000000..b85e24f --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLInputElement/input-image-alt-text-expected.txt
@@ -0,0 +1,30 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x576 + LayoutBlockFlow (anonymous) at (0,0) size 784x36 + LayoutText {#text} at (0,0) size 762x36 + text run at (0,0) width 493: "This tests whether alt text is shown for image-type form input elements with " + text run at (492,0) width 270: "no src attribute. You should see \"Success\"" + text run at (0,18) width 229: "twice, followed by a blue rectangle." + LayoutBlockFlow {P} at (0,52) size 784x0 + LayoutBlockFlow {FORM} at (0,52) size 784x94 + LayoutBlockFlow {INPUT} at (0,0) size 47.44x17 + LayoutBR {BR} at (47,17) size 1x0 + LayoutBlockFlow {INPUT} at (0,17) size 102x52 [border: (1px solid #000000)] + LayoutBR {BR} at (102,68) size 0x0 + LayoutImage {INPUT} at (0,69) size 75x25 + LayoutBR {BR} at (75,94) size 0x0 +layer at (8,60) size 47x17 clip at (9,61) size 45x15 + LayoutBlockFlow {DIV} at (0,0) size 47.44x17 [border: (1px solid #C0C0C0)] +layer at (10,62) size 43x13 + LayoutBlockFlow {DIV} at (2,2) size 43.44x13 + LayoutText {#text} at (0,0) size 44x13 + text run at (0,0) width 44: "Success" +layer at (9,78) size 100x50 clip at (10,79) size 98x48 + LayoutBlockFlow {DIV} at (1,1) size 100x50 [border: (1px solid #C0C0C0)] +layer at (11,80) size 96x13 + LayoutBlockFlow {DIV} at (2,2) size 96x13 + LayoutText {#text} at (0,0) size 44x13 + text run at (0,0) width 44: "Success"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLMeterElement/meter-optimums-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLMeterElement/meter-optimums-expected.png new file mode 100644 index 0000000..d22d96db3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLMeterElement/meter-optimums-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.png new file mode 100644 index 0000000..47a8cd0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.txt new file mode 100644 index 0000000..3b2e158 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.txt
@@ -0,0 +1,38 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutTable {TABLE} at (0,0) size 664x52 [border: (1px outset #808080)] + LayoutTableCol {COLGROUP} at (0,0) size 0x0 + LayoutTableCol {COL} at (0,0) size 0x0 + LayoutTableCol {COL} at (0,0) size 0x0 + LayoutTableCol {COL} at (0,0) size 0x0 + LayoutTableSection {TBODY} at (1,1) size 662x50 + LayoutTableRow {TR} at (0,2) size 662x22 + LayoutTableCell {TD} at (2,2) size 500x22 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (2,2) size 73x18 + text run at (2,2) width 73: "col 1 row 1" + LayoutTableCell {TD} at (504,2) size 77x22 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1] + LayoutText {#text} at (2,2) size 73x18 + text run at (2,2) width 73: "col 2 row 1" + LayoutTableCell {TD} at (583,2) size 77x22 [border: (1px inset #808080)] [r=0 c=2 rs=1 cs=1] + LayoutText {#text} at (2,2) size 73x18 + text run at (2,2) width 73: "col 3 row 1" + LayoutTableRow {TR} at (0,26) size 662x22 + LayoutTableCell {TD} at (2,26) size 500x22 [border: (1px inset #808080)] [r=1 c=0 rs=1 cs=1] + LayoutText {#text} at (2,2) size 73x18 + text run at (2,2) width 73: "col 1 row 2" + LayoutTableCell {TD} at (504,26) size 77x22 [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1] + LayoutText {#text} at (2,2) size 73x18 + text run at (2,2) width 73: "col 2 row 2" + LayoutTableCell {TD} at (583,26) size 77x22 [border: (1px inset #808080)] [r=1 c=2 rs=1 cs=1] + LayoutText {#text} at (2,2) size 73x18 + text run at (2,2) width 73: "col 3 row 3" + LayoutBlockFlow (anonymous) at (0,52) size 784x18 + LayoutButton {BUTTON} at (0,0) size 355.27x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 339.27x13 + LayoutText {#text} at (0,0) size 340x13 + text run at (0,0) width 340: "Click me to test manually. The first column should grow to 500px." + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dynamic/008-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dynamic/008-expected.png new file mode 100644 index 0000000..41c33758 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dynamic/008-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dynamic/012-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dynamic/012-expected.png new file mode 100644 index 0000000..8c5ef4fd --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dynamic/012-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dynamic/positioned-movement-with-positioned-children-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dynamic/positioned-movement-with-positioned-children-expected.txt new file mode 100644 index 0000000..aa4a0052 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/dynamic/positioned-movement-with-positioned-children-expected.txt
@@ -0,0 +1,21 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {DIV} at (0,0) size 100x100 [bgcolor=#FF0000] + LayoutText {#text} at (0,0) size 99x54 + text run at (0,0) width 98: "You should not" + text run at (0,18) width 99: "see this. Resize" + text run at (0,36) width 79: "the window." +hidden layer at (8,8) size 0x0 + LayoutBlockFlow (positioned) {DIV} at (8,8) size 0x0 +hidden layer at (8,8) size 100x118 + LayoutBlockFlow (positioned) {DIV} at (0,0) size 100x118 + LayoutBlockFlow {DIV} at (0,0) size 100x100 [bgcolor=#008000] + LayoutBlockFlow (anonymous) at (0,100) size 100x18 + LayoutButton {BUTTON} at (0,0) size 50.48x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 34.48x13 + LayoutText {#text} at (0,0) size 35x13 + text run at (0,0) width 35: "Button" + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/files/file-in-input-display-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/files/file-in-input-display-expected.png new file mode 100644 index 0000000..b6069d39 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/files/file-in-input-display-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/inline/absolute-positioned-inline-in-centred-block-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/inline/absolute-positioned-inline-in-centred-block-expected.png new file mode 100644 index 0000000..e5684878 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/inline/absolute-positioned-inline-in-centred-block-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks-expected.png new file mode 100644 index 0000000..ec3bb0e --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/invalid/014-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/invalid/014-expected.png new file mode 100644 index 0000000..6cbaa21 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/invalid/014-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/lists/dynamic-marker-crash-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/lists/dynamic-marker-crash-expected.png new file mode 100644 index 0000000..af30f9c3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/lists/dynamic-marker-crash-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/multicol/multicol-with-child-renderLayer-for-input-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/multicol/multicol-with-child-renderLayer-for-input-expected.txt new file mode 100644 index 0000000..2a8707f --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/multicol/multicol-with-child-renderLayer-for-input-expected.txt
@@ -0,0 +1,29 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 +layer at (8,8) size 784x59 + LayoutBlockFlow {DIV} at (0,0) size 784x59 + LayoutMultiColumnSet (anonymous) at (0,0) size 784x59 +layer at (8,8) size 384x118 + LayoutMultiColumnFlowThread (anonymous) at (0,0) size 384x118 + LayoutText {#text} at (0,0) size 351x115 + text run at (0,0) width 71: "Filler Text " + text run at (70,0) width 281: "Filler Text Filler Text Filler Text Filler Text" + text run at (0,18) width 284: "Filler Text Filler Text Filler Text Filler Text " + text run at (283,18) width 68: "Filler Text" + text run at (0,36) width 351: "Filler Text Filler Text Filler Text Filler Text Filler Text" + text run at (0,59) width 213: "Filler Text Filler Text Filler Text " + text run at (212,59) width 72: "Filler Text " + text run at (283,59) width 68: "Filler Text" + text run at (0,77) width 351: "Filler Text Filler Text Filler Text Filler Text Filler Text" + text run at (0,97) width 142: "Filler Text Filler Text " + LayoutText {#text} at (0,0) size 0x0 +layer at (152,105) size 131x19 clip at (154,107) size 127x15 + LayoutTextControl (relative positioned) {INPUT} at (143.73,97) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] +layer at (155,108) size 125x13 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 + LayoutBlockFlow {DIV} at (3,3) size 125x13 + LayoutText {#text} at (0,0) size 38x13 + text run at (0,0) width 38: "Testing" +caret: position 7 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/overflow-x-y-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/overflow-x-y-expected.png new file mode 100644 index 0000000..75e5f6e5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/overflow-x-y-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/overflow-x-y-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/overflow-x-y-expected.txt new file mode 100644 index 0000000..48948c133 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/overflow-x-y-expected.txt
@@ -0,0 +1,84 @@ +layer at (0,0) size 800x600 clip at (0,0) size 785x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 785x600 + LayoutBlockFlow {HTML} at (0,0) size 785x600 + LayoutBlockFlow {BODY} at (8,8) size 769x584 + LayoutBlockFlow (anonymous) at (0,0) size 769x18 + LayoutText {#text} at (0,0) size 317x18 + text run at (0,0) width 317: "The body should always have a vertical scrollbar." + LayoutBlockFlow (anonymous) at (0,218) size 769x51 + LayoutText {#text} at (141,33) size 4x18 + text run at (141,33) width 4: " " + LayoutText {#text} at (0,0) size 0x0 +layer at (8,26) size 300x100 clip at (8,26) size 285x100 scrollHeight 324 + LayoutBlockFlow {DIV} at (0,18) size 300x100 + LayoutText {#text} at (0,0) size 52x18 + text run at (0,0) width 52: "Y scroll" + LayoutBR {BR} at (51,14) size 1x0 + LayoutText {#text} at (0,18) size 52x18 + text run at (0,18) width 52: "Y scroll" + LayoutBR {BR} at (51,32) size 1x0 + LayoutText {#text} at (0,36) size 52x18 + text run at (0,36) width 52: "Y scroll" + LayoutBR {BR} at (51,50) size 1x0 + LayoutText {#text} at (0,54) size 52x18 + text run at (0,54) width 52: "Y scroll" + LayoutBR {BR} at (51,68) size 1x0 + LayoutText {#text} at (0,72) size 52x18 + text run at (0,72) width 52: "Y scroll" + LayoutBR {BR} at (51,86) size 1x0 + LayoutText {#text} at (0,90) size 52x18 + text run at (0,90) width 52: "Y scroll" + LayoutBR {BR} at (51,104) size 1x0 + LayoutText {#text} at (0,108) size 52x18 + text run at (0,108) width 52: "Y scroll" + LayoutBR {BR} at (51,122) size 1x0 + LayoutText {#text} at (0,126) size 52x18 + text run at (0,126) width 52: "Y scroll" + LayoutBR {BR} at (51,140) size 1x0 + LayoutText {#text} at (0,144) size 52x18 + text run at (0,144) width 52: "Y scroll" + LayoutBR {BR} at (51,158) size 1x0 + LayoutText {#text} at (0,162) size 52x18 + text run at (0,162) width 52: "Y scroll" + LayoutBR {BR} at (51,176) size 1x0 + LayoutText {#text} at (0,180) size 52x18 + text run at (0,180) width 52: "Y scroll" + LayoutBR {BR} at (51,194) size 1x0 + LayoutText {#text} at (0,198) size 52x18 + text run at (0,198) width 52: "Y scroll" + LayoutBR {BR} at (51,212) size 1x0 + LayoutText {#text} at (0,216) size 52x18 + text run at (0,216) width 52: "Y scroll" + LayoutBR {BR} at (51,230) size 1x0 + LayoutText {#text} at (0,234) size 52x18 + text run at (0,234) width 52: "Y scroll" + LayoutBR {BR} at (51,248) size 1x0 + LayoutText {#text} at (0,252) size 52x18 + text run at (0,252) width 52: "Y scroll" + LayoutBR {BR} at (51,266) size 1x0 + LayoutText {#text} at (0,270) size 52x18 + text run at (0,270) width 52: "Y scroll" + LayoutBR {BR} at (51,284) size 1x0 + LayoutText {#text} at (0,288) size 52x18 + text run at (0,288) width 52: "Y scroll" + LayoutBR {BR} at (51,302) size 1x0 + LayoutText {#text} at (0,306) size 52x18 + text run at (0,306) width 52: "Y scroll" + LayoutBR {BR} at (51,320) size 1x0 +layer at (8,126) size 300x100 clip at (8,126) size 300x85 scrollWidth 1208 + LayoutBlockFlow {DIV} at (0,118) size 300x100 + LayoutText {#text} at (0,0) size 1209x18 + text run at (0,0) width 496: "X scroll X scroll X scroll X scroll X scroll X scroll X scroll X scroll X scroll " + text run at (495,0) width 332: "X scroll X scroll X scroll X scroll X scroll X scroll " + text run at (826,0) width 383: "X scroll X scroll X scroll X scroll X scroll X scroll X scroll" +layer at (8,241) size 141x32 clip at (9,242) size 124x30 + LayoutTextControl {TEXTAREA} at (0,15) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 120x13 + LayoutText {#text} at (0,0) size 87x13 + text run at (0,0) width 87: "Textarea y-scroll" +layer at (153,226) size 141x47 clip at (154,227) size 139x30 + LayoutTextControl {TEXTAREA} at (145,0) size 141x47 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 135x13 + LayoutText {#text} at (0,0) size 87x13 + text run at (0,0) width 87: "Textarea x-scroll"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png new file mode 100644 index 0000000..a68aaeb --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.txt new file mode 100644 index 0000000..9faa65ef --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.txt
@@ -0,0 +1,19 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 +layer at (0,42) size 800x558 scrollY 278.00 scrollHeight 836 + LayoutBlockFlow (positioned) {DIV} at (0,42) size 800x558 +layer at (0,-236) size 570x836 backgroundClip at (0,42) size 800x558 clip at (0,42) size 800x558 + LayoutBlockFlow (positioned) {DIV} at (0,0) size 570.41x836 + LayoutBlockFlow (anonymous) at (0,0) size 570.41x18 + LayoutText {#text} at (0,0) size 571x18 + text run at (0,0) width 571: "This tests that we can scroll to reveal something in a nested positioned block in overflow." + LayoutBlockFlow {DIV} at (0,18) size 570.41x800 + LayoutBlockFlow (anonymous) at (0,818) size 570.41x18 + LayoutButton {INPUT} at (0,0) size 198.05x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 182.05x13 + LayoutText {#text} at (0,0) size 183x13 + text run at (0,0) width 183: "If you can see this, test has passed" + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/scrollRevealButton-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/scrollRevealButton-expected.png new file mode 100644 index 0000000..d11e8bf --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/scrollRevealButton-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/scrollRevealButton-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/scrollRevealButton-expected.txt new file mode 100644 index 0000000..0db695e --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/overflow/scrollRevealButton-expected.txt
@@ -0,0 +1,43 @@ +layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollY 5.00 scrollHeight 1188 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 785x1188 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutBlockFlow {HTML} at (0,0) size 785x1188 + LayoutBlockFlow {BODY} at (8,8) size 769x1172 + LayoutBlockFlow (anonymous) at (0,0) size 769x18 + LayoutText {#text} at (0,0) size 348x18 + text run at (0,0) width 348: "This test should scroll recursively to reveal the button." + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {DIV} at (0,18) size 769x500 + LayoutBlockFlow (anonymous) at (0,518) size 769x154 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {DIV} at (0,672) size 769x500 +layer at (8,526) size 304x154 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutIFrame {IFRAME} at (0,0) size 304x154 [border: (2px inset #EEEEEE)] + layer at (0,0) size 300x150 clip at (0,0) size 285x135 scrollY 90.00 scrollWidth 308 scrollHeight 316 + LayoutView at (0,0) size 300x150 + layer at (0,0) size 285x316 backgroundClip at (0,0) size 285x135 clip at (0,0) size 285x135 + LayoutBlockFlow {HTML} at (0,0) size 285x316 + LayoutBlockFlow {BODY} at (8,8) size 269x300 + layer at (8,8) size 300x300 backgroundClip at (8,8) size 277x127 clip at (8,8) size 277x127 scrollY 543.00 scrollHeight 1268 + LayoutBlockFlow {DIV} at (0,0) size 300x300 + LayoutBlockFlow (anonymous) at (0,0) size 285x18 + LayoutText {#text} at (0,0) size 89x18 + text run at (0,0) width 89: "overflow:auto" + LayoutBlockFlow {DIV} at (0,18) size 285x600 + LayoutBlockFlow {DIV} at (0,768) size 285x500 + layer at (8,83) size 150x150 backgroundClip at (8,83) size 150x52 clip at (8,83) size 135x52 scrollY 470.00 scrollHeight 854 + LayoutBlockFlow {DIV} at (0,618) size 150x150 + LayoutBlockFlow (anonymous) at (0,0) size 135x18 + LayoutText {#text} at (0,0) size 89x18 + text run at (0,0) width 89: "overflow:auto" + LayoutBlockFlow {DIV} at (0,18) size 135x500 + LayoutBlockFlow (anonymous) at (0,518) size 135x36 + LayoutBR {BR} at (0,0) size 0x18 + LayoutButton {INPUT} at (0,18) size 50.48x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 34.48x13 + LayoutText {#text} at (0,0) size 35x13 + text run at (0,0) width 35: "Button" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {DIV} at (0,554) size 135x300 +scrolled to 0,5 +frame 'fr' scrolled to 0,90
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/document-write-option-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/document-write-option-expected.png new file mode 100644 index 0000000..eefd03c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/document-write-option-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/document-write-option-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/document-write-option-expected.txt new file mode 100644 index 0000000..d6a8e39 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/document-write-option-expected.txt
@@ -0,0 +1,10 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutMenuList {SELECT} at (0,0) size 313x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 313x18 + LayoutText (anonymous) at (8,2) size 282x13 + text run at (8,2) width 282: "This is a very long string so it makes the select bigger." + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/entity-comment-in-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/entity-comment-in-textarea-expected.png new file mode 100644 index 0000000..b7b30b5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/entity-comment-in-textarea-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/open-comment-in-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/open-comment-in-textarea-expected.png new file mode 100644 index 0000000..372b4fa --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/open-comment-in-textarea-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/open-comment-in-textarea-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/open-comment-in-textarea-expected.txt new file mode 100644 index 0000000..a0dd458 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/parser/open-comment-in-textarea-expected.txt
@@ -0,0 +1,18 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutText {#text} at (141,18) size 251x18 + text run at (141,18) width 251: " This should not be part of the textarea." +layer at (8,8) size 141x32 clip at (9,9) size 124x30 scrollHeight 56 + LayoutTextControl {TEXTAREA} at (0,0) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] + LayoutBlockFlow {DIV} at (3,3) size 120x52 + LayoutText {#text} at (0,0) size 118x39 + text run at (0,0) width 21: "<!--" + text run at (20,0) width 1: " " + text run at (0,13) width 114: "This should be part of" + text run at (113,13) width 5: " " + text run at (0,26) width 66: "the textarea." + text run at (65,26) width 1: " " + LayoutBR {BR} at (0,39) size 0x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/replaced/border-radius-clip-content-edge-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/replaced/border-radius-clip-content-edge-expected.png deleted file mode 100644 index a1c0a0c..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/replaced/border-radius-clip-content-edge-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/replaced/replaced-breaking-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/replaced/replaced-breaking-expected.txt new file mode 100644 index 0000000..e27ac40 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/replaced/replaced-breaking-expected.txt
@@ -0,0 +1,80 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {DIV} at (0,0) size 32x474 [border: (1px solid #FF0000)] + LayoutTextControl {INPUT} at (1,1) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] + LayoutTextControl {INPUT} at (1,20) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] + LayoutText {#text} at (0,0) size 0x0 + LayoutImage {IMG} at (1,39) size 27x27 [border: (1px solid #000000)] + LayoutImage {IMG} at (1,66) size 27x27 [border: (1px solid #000000)] + LayoutText {#text} at (0,0) size 0x0 + LayoutButton {INPUT} at (1,93) size 42.25x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 26.25x13 + LayoutText {#text} at (0,0) size 27x13 + text run at (0,0) width 27: "input" + LayoutButton {INPUT} at (1,111) size 42.25x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 26.25x13 + LayoutText {#text} at (0,0) size 27x13 + text run at (0,0) width 27: "input" + LayoutText {#text} at (0,0) size 0x0 + LayoutButton {BUTTON} at (1,129) size 50.02x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 34.02x13 + LayoutText {#text} at (0,0) size 34x13 + text run at (0,0) width 34: "button" + LayoutButton {BUTTON} at (1,147) size 50.02x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 34.02x13 + LayoutText {#text} at (0,0) size 34x13 + text run at (0,0) width 34: "button" + LayoutText {#text} at (0,0) size 0x0 + LayoutMenuList {SELECT} at (1,165) size 63x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 63x18 + LayoutText (anonymous) at (8,2) size 32x13 + text run at (8,2) width 32: "select" + LayoutMenuList {SELECT} at (1,183) size 63x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 63x18 + LayoutText (anonymous) at (8,2) size 32x13 + text run at (8,2) width 32: "select" + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {INPUT} at (3.89,294) size 12x12 + LayoutBlockFlow {INPUT} at (3.89,312) size 12x12 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {INPUT} at (3.89,330) size 12x13 + LayoutBlockFlow {INPUT} at (3.89,349) size 12x13 + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 +layer at (12,12) size 125x13 + LayoutBlockFlow {DIV} at (3,3) size 125x13 +layer at (12,31) size 125x13 + LayoutBlockFlow {DIV} at (3,3) size 125x13 +layer at (9,209) size 48x45 clip at (10,210) size 35x43 + LayoutListBox {SELECT} at (1,201.44) size 48.36x44.56 [bgcolor=#FFFFFF] [border: (1px solid #999999)] + LayoutBlockFlow {OPTION} at (1,1) size 35.36x14.19 + LayoutText {#text} at (2,0) size 32x13 + text run at (2,0) width 32: "select" +layer at (9,254) size 48x45 clip at (10,255) size 35x43 + LayoutListBox {SELECT} at (1,246.44) size 48.36x44.56 [bgcolor=#FFFFFF] [border: (1px solid #999999)] + LayoutBlockFlow {OPTION} at (1,1) size 35.36x14.19 + LayoutText {#text} at (2,0) size 32x13 + text run at (2,0) width 32: "select" +layer at (9,373) size 27x27 + LayoutIFrame {IFRAME} at (1,365) size 27x27 [border: (1px solid #000000)] + layer at (0,0) size 25x25 + LayoutView at (0,0) size 25x25 + layer at (0,0) size 25x25 + LayoutBlockFlow {HTML} at (0,0) size 25x25 + LayoutBlockFlow {BODY} at (8,8) size 9x9 +layer at (9,400) size 27x27 + LayoutIFrame {IFRAME} at (1,392) size 27x27 [border: (1px solid #000000)] + layer at (0,0) size 25x25 + LayoutView at (0,0) size 25x25 + layer at (0,0) size 25x25 + LayoutBlockFlow {HTML} at (0,0) size 25x25 + LayoutBlockFlow {BODY} at (8,8) size 9x9 +layer at (9,427) size 27x27 + LayoutEmbeddedObject {EMBED} at (1,419) size 27x27 [border: (1px solid #000000)] +layer at (9,454) size 27x27 + LayoutEmbeddedObject {EMBED} at (1,446) size 27x27 [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/replaced/replaced-breaking-mixture-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/replaced/replaced-breaking-mixture-expected.png new file mode 100644 index 0000000..c169fca64 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/replaced/replaced-breaking-mixture-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/replaced/width100percent-button-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/replaced/width100percent-button-expected.png new file mode 100644 index 0000000..d34ac90b --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/replaced/width100percent-button-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/selectors/064-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/selectors/064-expected.txt new file mode 100644 index 0000000..6df64fd8 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/selectors/064-expected.txt
@@ -0,0 +1,17 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x85 + LayoutBlockFlow {HTML} at (0,0) size 800x85 + LayoutBlockFlow {BODY} at (8,16) size 784x53 + LayoutBlockFlow {DIV} at (0,0) size 784x53 + LayoutBlockFlow {P} at (0,0) size 784x18 [color=#00FF00] + LayoutInline {A} at (0,0) size 286x18 [color=#000000] + LayoutText {#text} at (0,0) size 286x18 + text run at (0,0) width 286: "This text should turn green while it is active." + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {P} at (0,34) size 784x19 [color=#00FF00] + LayoutButton {BUTTON} at (0,1) size 244.48x18 [color=#000000] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 228.48x13 + LayoutText {#text} at (0,0) size 229x13 + text run at (0,0) width 229: "This text should turn green while it is active." + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/spatial-navigation/snav-multiple-select-focusring-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/spatial-navigation/snav-multiple-select-focusring-expected.txt new file mode 100644 index 0000000..57963a0c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/spatial-navigation/snav-multiple-select-focusring-expected.txt
@@ -0,0 +1,15 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x75 + LayoutBlockFlow {HTML} at (0,0) size 800x75 + LayoutBlockFlow {BODY} at (8,8) size 784x59 + LayoutText {#text} at (0,0) size 0x0 + LayoutText {#text} at (0,0) size 0x0 +layer at (8,8) size 352x59 clip at (9,9) size 339x57 + LayoutListBox {SELECT} at (0,0.25) size 352x58.75 [bgcolor=#FFFFFF] [border: (1px solid #999999)] + LayoutBlockFlow {OPTION} at (1,1) size 339x14.19 [color=#FFFFFF] [bgcolor=#0069D9] + LayoutText {#text} at (2,0) size 335x13 + text run at (2,0) width 335: "make-the-item-long-enough-to-make-a-difference-in-pixel-test" + LayoutBlockFlow {OPTION} at (1,15.19) size 339x14.19 + LayoutText {#text} at (2,0) size 7x13 + text run at (2,0) width 7: "b"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/append-cells2-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/append-cells2-expected.png new file mode 100644 index 0000000..e4dc8ed --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/append-cells2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/append-cells2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/append-cells2-expected.txt new file mode 100644 index 0000000..9682756 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/append-cells2-expected.txt
@@ -0,0 +1,89 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {P} at (0,0) size 784x18 + LayoutText {#text} at (0,0) size 465x18 + text run at (0,0) width 465: "Rows should have different number of columns, but those should match." + LayoutTable {TABLE} at (0,34) size 725x90 + LayoutTableSection {THEAD} at (0,0) size 725x18 + LayoutTableRow {TR} at (0,0) size 725x18 + LayoutTableCell {TD} at (0,0) size 90x18 [bgcolor=#7CFC00] [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "1" + LayoutTableCell {TD} at (90,0) size 90x18 [bgcolor=#008000] [r=0 c=1 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "1+" + LayoutTableCell {TD} at (180,0) size 90x18 [bgcolor=#00FFFF] [r=0 c=2 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "2" + LayoutTableCell {TD} at (270,0) size 91x18 [bgcolor=#008B8B] [r=0 c=3 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "2+" + LayoutTableCell {TD} at (361,0) size 91x18 [bgcolor=#FFFF00] [r=0 c=4 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "3" + LayoutTableCell {TD} at (452,0) size 91x18 [bgcolor=#FFD700] [r=0 c=5 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "3+" + LayoutTableSection {TFOOT} at (0,72) size 725x18 + LayoutTableRow {TR} at (0,0) size 725x18 + LayoutTableCell {TD} at (0,0) size 90x18 [bgcolor=#7CFC00] [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "1" + LayoutTableCell {TD} at (90,0) size 90x18 [bgcolor=#008000] [r=0 c=1 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "1+" + LayoutTableCell {TD} at (180,0) size 90x18 [bgcolor=#00FFFF] [r=0 c=2 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "2" + LayoutTableCell {TD} at (270,0) size 91x18 [bgcolor=#008B8B] [r=0 c=3 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "2+" + LayoutTableCell {TD} at (361,0) size 91x18 [bgcolor=#FFFF00] [r=0 c=4 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "3" + LayoutTableCell {TD} at (452,0) size 91x18 [bgcolor=#FFD700] [r=0 c=5 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "3+" + LayoutTableCell {TD} at (543,0) size 91x18 [bgcolor=#FFA500] [r=0 c=6 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "4" + LayoutTableCell {TD} at (634,0) size 91x18 [bgcolor=#FF8C00] [r=0 c=7 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "4+" + LayoutTableSection {TBODY} at (0,18) size 725x54 + LayoutTableRow {TR} at (0,0) size 725x18 + LayoutTableCell {TD} at (0,0) size 90x18 [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 4x18 + text run at (0,0) width 4: " " + LayoutTableRow {TR} at (0,18) size 725x18 + LayoutTableCell {TD} at (0,18) size 90x18 [bgcolor=#7CFC00] [r=1 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "1" + LayoutTableCell {TD} at (90,18) size 90x18 [bgcolor=#008000] [r=1 c=1 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "1+" + LayoutTableCell {TD} at (180,18) size 90x18 [bgcolor=#00FFFF] [r=1 c=2 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "2" + LayoutTableCell {TD} at (270,18) size 91x18 [bgcolor=#008B8B] [r=1 c=3 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "2+" + LayoutTableRow {TR} at (0,36) size 725x18 + LayoutTableCell {TD} at (0,36) size 90x18 [r=2 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 4x18 + text run at (0,0) width 4: " " + LayoutBlockFlow (anonymous) at (0,124) size 784x19 + LayoutButton {BUTTON} at (0,1) size 43.09x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 27.09x13 + LayoutText {#text} at (0,0) size 28x13 + text run at (0,0) width 28: "show" + LayoutText {#text} at (43,0) size 5x18 + text run at (43,0) width 5: " " + LayoutButton {BUTTON} at (47.09,1) size 38.28x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 22.28x13 + LayoutText {#text} at (0,0) size 23x13 + text run at (0,0) width 23: "hide" + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/remove-td-display-none-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/remove-td-display-none-expected.png new file mode 100644 index 0000000..3a976f7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/remove-td-display-none-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/remove-td-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/remove-td-display-none-expected.txt new file mode 100644 index 0000000..10aa5119 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/remove-td-display-none-expected.txt
@@ -0,0 +1,66 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {P} at (0,0) size 784x18 + LayoutText {#text} at (0,0) size 307x18 + text run at (0,0) width 307: "Both rows should have the same width (725px)." + LayoutTable {TABLE} at (0,34) size 725x36 + LayoutTableSection {TBODY} at (0,0) size 725x36 + LayoutTableRow {TR} at (0,0) size 725x18 + LayoutTableCell {TD} at (0,0) size 90x18 [bgcolor=#7CFC00] [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "1" + LayoutTableCell {TD} at (90,0) size 90x18 [bgcolor=#008000] [r=0 c=1 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "1+" + LayoutTableCell {TD} at (180,0) size 90x18 [bgcolor=#00FFFF] [r=0 c=2 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "2" + LayoutTableCell {TD} at (270,0) size 91x18 [bgcolor=#008B8B] [r=0 c=3 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "2+" + LayoutTableCell {TD} at (361,0) size 91x18 [bgcolor=#FFFF00] [r=0 c=4 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "3" + LayoutTableCell {TD} at (452,0) size 91x18 [bgcolor=#FFD700] [r=0 c=5 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "3+" + LayoutTableCell {TD} at (543,0) size 91x18 [bgcolor=#FFA500] [r=0 c=6 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "4" + LayoutTableCell {TD} at (634,0) size 91x18 [bgcolor=#FF8C00] [r=0 c=7 rs=1 cs=1] + LayoutText {#text} at (0,0) size 18x18 + text run at (0,0) width 18: "4+" + LayoutTableRow {TR} at (0,18) size 725x18 + LayoutTableCell {TD} at (0,18) size 90x18 [r=1 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 4x18 + text run at (0,0) width 4: " " + LayoutTable {TABLE} at (0,70) size 725x18 + LayoutTableSection {TBODY} at (0,0) size 725x18 + LayoutTableRow {TR} at (0,0) size 725x18 + LayoutTableCell {TD} at (0,0) size 181x18 [bgcolor=#7CFC00] [r=0 c=0 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "1" + LayoutTableCell {TD} at (181,0) size 181x18 [bgcolor=#00FFFF] [r=0 c=1 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "2" + LayoutTableCell {TD} at (362,0) size 181x18 [bgcolor=#FFFF00] [r=0 c=2 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "3" + LayoutTableCell {TD} at (543,0) size 182x18 [bgcolor=#FFA500] [r=0 c=3 rs=1 cs=1] + LayoutText {#text} at (0,0) size 8x18 + text run at (0,0) width 8: "4" + LayoutBlockFlow (anonymous) at (0,88) size 784x19 + LayoutButton {BUTTON} at (0,1) size 43.09x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 27.09x13 + LayoutText {#text} at (0,0) size 28x13 + text run at (0,0) width 28: "show" + LayoutText {#text} at (43,0) size 5x18 + text run at (43,0) width 5: " " + LayoutButton {BUTTON} at (47.09,1) size 38.28x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 22.28x13 + LayoutText {#text} at (0,0) size 23x13 + text run at (0,0) width 23: "hide" + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/spanOverlapRepaint-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/spanOverlapRepaint-expected.png new file mode 100644 index 0000000..1f54639 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/table/spanOverlapRepaint-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/color-emoji-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/color-emoji-expected.png new file mode 100644 index 0000000..6759624 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/color-emoji-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/complex-preferred-logical-widths-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/complex-preferred-logical-widths-expected.png new file mode 100644 index 0000000..fa2211a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/complex-preferred-logical-widths-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/drawBidiText-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/drawBidiText-expected.png new file mode 100644 index 0000000..0757e0a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/drawBidiText-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/emoticons-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/emoticons-expected.png new file mode 100644 index 0000000..dba363d --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/emoticons-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/emphasis-complex-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/emphasis-complex-expected.png new file mode 100644 index 0000000..1a27a0c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/emphasis-complex-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/font-fallback-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/font-fallback-expected.png new file mode 100644 index 0000000..ccaae1aa --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/font-fallback-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/font-fallback-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/font-fallback-expected.txt new file mode 100644 index 0000000..6ca96f6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/font-fallback-expected.txt
@@ -0,0 +1,61 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x217 + LayoutBlockFlow {HTML} at (0,0) size 800x217 + LayoutBlockFlow {BODY} at (8,8) size 784x201 + LayoutBlockFlow {DIV} at (0,0) size 784x21 + LayoutBlockFlow {SPAN} at (0,1) size 160x18 + LayoutText {#text} at (0,0) size 48x18 + text run at (0,0) width 48: "Arabic:" + LayoutText {#text} at (160,1) size 91x18 + text run at (160,1) width 4: " " + text run at (164,1) width 83 RTL: "\x{627}\x{644}\x{623}\x{64E}\x{628}\x{652}\x{62C}\x{64E}\x{62F}\x{650}\x{64A}\x{64E}\x{651}\x{629} \x{627}\x{644}\x{639}\x{64E}\x{631}\x{64E}\x{628}\x{650}\x{64A}\x{64E}\x{651}\x{629}" + text run at (246,1) width 5: " \x{200E}" + LayoutBlockFlow {DIV} at (0,21) size 784x18 + LayoutBlockFlow {SPAN} at (0,0) size 160x18 + LayoutText {#text} at (0,0) size 69x18 + text run at (0,0) width 69: "Armenian:" + LayoutText {#text} at (160,0) size 164x18 + text run at (160,0) width 164: " \x{540}\x{561}\x{575}\x{578}\x{581} \x{563}\x{580}\x{565}\x{580} Hayots grer" + LayoutBlockFlow {DIV} at (0,39) size 784x20 + LayoutBlockFlow {SPAN} at (0,0) size 160x18 + LayoutText {#text} at (0,0) size 66x18 + text run at (0,0) width 66: "Cherokee:" + LayoutText {#text} at (160,0) size 92x18 + text run at (160,0) width 92: " \x{13A2}\x{13E3}\x{13B5}\x{13CD}\x{13A0}\x{13C1}\x{13D7}" + LayoutBlockFlow {DIV} at (0,59) size 784x25 + LayoutBlockFlow {SPAN} at (0,4) size 160x18 + LayoutText {#text} at (0,0) size 79x18 + text run at (0,0) width 79: "Devanagari:" + LayoutText {#text} at (160,4) size 51x18 + text run at (160,4) width 51: " \x{926}\x{947}\x{935}\x{928}\x{93E}\x{917}\x{930}\x{940}" + LayoutBlockFlow {DIV} at (0,84) size 784x25 + LayoutBlockFlow {SPAN} at (0,4) size 160x18 + LayoutText {#text} at (0,0) size 71x18 + text run at (0,0) width 71: "Gurmukhi:" + LayoutText {#text} at (160,4) size 30x18 + text run at (160,4) width 30: " \x{A26}\x{A3F}\x{A32}" + LayoutBlockFlow {DIV} at (0,109) size 784x29 + LayoutBlockFlow {SPAN} at (0,2) size 160x18 + LayoutText {#text} at (0,0) size 49x18 + text run at (0,0) width 49: "Khmer:" + LayoutText {#text} at (160,2) size 51x18 + text run at (160,2) width 51: " \x{17A2}\x{1780}\x{17D2}\x{179F}\x{179A}\x{1781}\x{17D2}\x{1798}\x{17C2}\x{179A};" + LayoutBlockFlow {DIV} at (0,138) size 784x19 + LayoutBlockFlow {SPAN} at (0,0) size 160x18 + LayoutText {#text} at (0,0) size 52x18 + text run at (0,0) width 52: "Hangul:" + LayoutText {#text} at (160,0) size 320x18 + text run at (160,0) width 320: " \x{3131} \x{3134} \x{3137} \x{3139} \x{3141} \x{3142} \x{3145} \x{3181} \x{314B} \x{314C} \x{314D} \x{3148} \x{314A} \x{317F} \x{3147} \x{314E}" + LayoutBlockFlow {DIV} at (0,157) size 784x22 + LayoutBlockFlow {SPAN} at (0,3) size 160x18 + LayoutText {#text} at (0,0) size 75x18 + text run at (0,0) width 75: "Mongolian:" + LayoutText {#text} at (160,3) size 87x18 + text run at (160,3) width 87: " \x{182E}\x{1823}\x{1829}\x{182D}\x{1823}\x{182F}\x{182A}\x{1822}\x{1834}\x{1822}\x{182D}" + LayoutBlockFlow {DIV} at (0,179) size 784x22 + LayoutBlockFlow {SPAN} at (0,3) size 160x18 + LayoutText {#text} at (0,0) size 69x18 + text run at (0,0) width 69: "Glagolitic:" + LayoutText {#text} at (160,3) size 68x18 + text run at (160,3) width 68: " \x{2C09}\x{2C0A}\x{2C1F}\x{2C09}"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/font-ligature-letter-spacing-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/font-ligature-letter-spacing-expected.txt deleted file mode 100644 index 399ab86..0000000 --- a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/font-ligature-letter-spacing-expected.txt +++ /dev/null
@@ -1,7 +0,0 @@ -This is a testharness.js-based test. -Harness Error. harness_status.status = 1 , harness_status.message = 1 duplicate test name: "Ligature expected not to be applied due to letter spacing." -FAIL Ligature expected not to be applied due to letter spacing. assert_equals: Ligature not applied due to letter spacing. expected 282.96875 but got 138.359375 -FAIL Ligature expected not to be applied due to letter spacing. assert_equals: Ligature not applied due to letter spacing. expected 282.96875 but got 138.359375 -PASS Non-ligature font feature expected to be applied despite letter spacing. -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/bidi-listbox-atsui-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/bidi-listbox-atsui-expected.png new file mode 100644 index 0000000..b515f857 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/bidi-listbox-atsui-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/bidi-listbox-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/bidi-listbox-expected.png new file mode 100644 index 0000000..8ac648c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/bidi-listbox-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/lang-glyph-cache-separation-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/lang-glyph-cache-separation-expected.png new file mode 100644 index 0000000..31e8374 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/lang-glyph-cache-separation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/unicode-bidi-plaintext-in-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/unicode-bidi-plaintext-in-textarea-expected.png new file mode 100644 index 0000000..1b3db5c --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/international/unicode-bidi-plaintext-in-textarea-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/justify-ideograph-complex-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/justify-ideograph-complex-expected.png new file mode 100644 index 0000000..bed6952 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/justify-ideograph-complex-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/justify-ideograph-simple-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/justify-ideograph-simple-expected.png new file mode 100644 index 0000000..bed6952 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/justify-ideograph-simple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/justify-ideograph-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/justify-ideograph-vertical-expected.png new file mode 100644 index 0000000..c8507602 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/justify-ideograph-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/midword-break-before-surrogate-pair-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/midword-break-before-surrogate-pair-expected.png new file mode 100644 index 0000000..d7e2c97 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/midword-break-before-surrogate-pair-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/textIteratorNilRenderer-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/textIteratorNilRenderer-expected.txt new file mode 100644 index 0000000..3511d12 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/textIteratorNilRenderer-expected.txt
@@ -0,0 +1,34 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {CENTER} at (0,0) size 784x53 + LayoutBlockFlow {FORM} at (0,0) size 784x19 + LayoutTable {TABLE} at (64,0) size 656x19 + LayoutTableSection {TBODY} at (0,0) size 656x19 + LayoutTableRow {TR} at (0,0) size 656x19 + LayoutTableCell {TD} at (0,0) size 150x18 [r=0 c=0 rs=2 cs=1] + LayoutText {#text} at (0,0) size 4x18 + text run at (0,0) width 4: " " + LayoutTableCell {TD} at (150,0) size 251x19 [r=0 c=1 rs=1 cs=1] + LayoutTextControl {INPUT} at (0,0) size 251x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] + LayoutText {#text} at (0,0) size 0x0 + LayoutTableCell {TD} at (401,0) size 95x18 [r=0 c=2 rs=1 cs=1] + LayoutButton {INPUT} at (0,0) size 94.27x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 78.27x13 + LayoutText {#text} at (0,0) size 79x13 + text run at (0,0) width 79: "Search Froogle" + LayoutText {#text} at (0,0) size 0x0 + LayoutTableCell {TD} at (496,0) size 160x18 [r=0 c=3 rs=2 cs=1] + LayoutInline {LABEL} at (0,0) size 116x13 + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow {INPUT} at (12.89,3) size 12x12 + LayoutText {#text} at (27,3) size 99x13 + text run at (27,3) width 99: " Remember this location" + LayoutText {#text} at (0,0) size 0x0 + LayoutBlockFlow (anonymous) at (0,35) size 784x18 + LayoutBR {BR} at (392,0) size 0x18 +layer at (225,11) size 245x13 + LayoutBlockFlow {DIV} at (3,3) size 245x13 +caret: position 1 of child 0 {#text} of child 1 {TD} of child 0 {TR} of child 1 {TBODY} of child 1 {TABLE} of child 1 {FORM} of child 1 {CENTER} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/unicode-fallback-font-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/unicode-fallback-font-expected.png new file mode 100644 index 0000000..62b09ba --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/unicode-fallback-font-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/unicode-fallback-font-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/unicode-fallback-font-expected.txt new file mode 100644 index 0000000..05489ab --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/unicode-fallback-font-expected.txt
@@ -0,0 +1,144 @@ +layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 1246 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 785x1246 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutBlockFlow {HTML} at (0,0) size 785x1245.88 + LayoutBlockFlow {BODY} at (8,21.44) size 769x1208.44 + LayoutBlockFlow {H1} at (0,0) size 769x37 + LayoutText {#text} at (0,0) size 236x37 + text run at (0,0) width 236: "Unicode Symbols" + LayoutBlockFlow {PRE} at (0,58.44) size 769x1098 + LayoutText {#text} at (0,0) size 411x105 + text run at (0,0) width 0: " " + text run at (0,15) width 411: "U+16Ax \x{16A0} \x{16A1} \x{16A2} \x{16A3} \x{16A4} \x{16A5} \x{16A6} \x{16A7} \x{16A8} \x{16A9} \x{16AA} \x{16AB} \x{16AC} \x{16AD} \x{16AE} \x{16AF}" + text run at (410,15) width 1: " " + text run at (0,30) width 411: "U+16Bx \x{16B0} \x{16B1} \x{16B2} \x{16B3} \x{16B4} \x{16B5} \x{16B6} \x{16B7} \x{16B8} \x{16B9} \x{16BA} \x{16BB} \x{16BC} \x{16BD} \x{16BE} \x{16BF}" + text run at (410,30) width 1: " " + text run at (0,45) width 411: "U+16Cx \x{16C0} \x{16C1} \x{16C2} \x{16C3} \x{16C4} \x{16C5} \x{16C6} \x{16C7} \x{16C8} \x{16C9} \x{16CA} \x{16CB} \x{16CC} \x{16CD} \x{16CE} \x{16CF}" + text run at (410,45) width 1: " " + text run at (0,60) width 411: "U+16Dx \x{16D0} \x{16D1} \x{16D2} \x{16D3} \x{16D4} \x{16D5} \x{16D6} \x{16D7} \x{16D8} \x{16D9} \x{16DA} \x{16DB} \x{16DC} \x{16DD} \x{16DE} \x{16DF}" + text run at (410,60) width 1: " " + text run at (0,75) width 411: "U+16Ex \x{16E0} \x{16E1} \x{16E2} \x{16E3} \x{16E4} \x{16E5} \x{16E6} \x{16E7} \x{16E8} \x{16E9} \x{16EA} \x{16EB} \x{16EC} \x{16ED} \x{16EE} \x{16EF}" + text run at (410,75) width 1: " " + text run at (0,90) width 70: "U+16Fx \x{16F0}" + text run at (69,90) width 1: " " + LayoutText {#text} at (0,105) size 297x120 + text run at (0,105) width 0: " " + text run at (0,120) width 258: "U+200x \x{2000} \x{2001} \x{2002} \x{2003} \x{2004} \x{2004} \x{2004} \x{2004} \x{2004} \x{2009} \x{200A} \x{200B} \x{200C} \x{200D} \x{200E} " + text run at (257,120) width 1 RTL: "\x{200F}" + text run at (257,120) width 1: " " + text run at (0,135) width 297: "U+201x \x{2010} \x{2011} \x{2012} \x{2013} \x{2014} \x{2015} \x{2016} \x{2017} \x{2018} \x{2019} \x{201A} \x{201B} \x{201C} \x{201D} \x{201E} \x{201F}" + text run at (296,135) width 1: " " + text run at (0,150) width 196: "U+202x \x{2020} \x{2021} \x{2022} \x{2023} \x{2024} \x{2025} \x{2026} \x{2027} \x{2028} \x{2029} " + text run at (195,150) width 8: "\x{202A} " + text run at (202,150) width 9 RTL: "\x{202B} " + text run at (210,150) width 9: "\x{202C} " + text run at (218,150) width 9 LTR override: "\x{202D} " + text run at (226,150) width 1 RTL override: " " + text run at (226,150) width 16 RTL override: "\x{202E} \x{202F}" + text run at (0,165) width 297: "U+203x \x{2030} \x{2031} \x{2032} \x{2033} \x{2034} \x{2035} \x{2036} \x{2037} \x{2038} \x{2039} \x{203A} \x{203B} \x{203C} \x{203D} \x{203E} \x{203F}" + text run at (296,165) width 1: " " + text run at (0,180) width 297: "U+204x \x{2040} \x{2041} \x{2042} \x{2043} \x{2044} \x{2045} \x{2046} \x{2047} \x{2048} \x{2049} \x{204A} \x{204B} \x{204C} \x{204D} \x{204E} \x{204F}" + text run at (296,180) width 1: " " + text run at (0,195) width 297: "U+205x \x{2050} \x{2051} \x{2052} \x{2053} \x{2054} \x{2055} \x{2056} \x{2057} \x{2058} \x{2059} \x{205A} \x{205B} \x{205C} \x{205D} \x{205E} \x{205F}" + text run at (296,195) width 1: " " + text run at (0,210) width 133: "U+206x \x{2060} \x{2061} \x{2062} \x{2063} \x{2064} \x{206A} \x{206B} \x{206C} \x{206D} \x{206E} \x{206F}" + text run at (132,210) width 1: " " + LayoutText {#text} at (0,225) size 380x350 + text run at (0,225) width 0: " " + text run at (0,244) width 355: "U+260x \x{2600} \x{2601} \x{2602} \x{2603} \x{2604} \x{2605} \x{2606} \x{2607} \x{2608} \x{2609} \x{260A} \x{260B} \x{260C} \x{260D} \x{260E} \x{260F}" + text run at (354,244) width 1: " " + text run at (0,266) width 364: "U+261x \x{2610} \x{2611} \x{2612} \x{2613} \x{2614} \x{2615} \x{2616} \x{2617} \x{2618} \x{2619} \x{261A} \x{261B} \x{261C} \x{261D} \x{261E} \x{261F}" + text run at (363,266) width 1: " " + text run at (0,288) width 339: "U+262x \x{2620} \x{2621} \x{2622} \x{2623} \x{2624} \x{2625} \x{2626} \x{2627} \x{2628} \x{2629} \x{262A} \x{262B} \x{262C} \x{262D} \x{262E} \x{262F}" + text run at (338,288) width 1: " " + text run at (0,310) width 344: "U+263x \x{2630} \x{2631} \x{2632} \x{2633} \x{2634} \x{2635} \x{2636} \x{2637} \x{2638} \x{2639} \x{263A} \x{263B} \x{263C} \x{263D} \x{263E} \x{263F}" + text run at (343,310) width 1: " " + text run at (0,331) width 342: "U+264x \x{2640} \x{2641} \x{2642} \x{2643} \x{2644} \x{2645} \x{2646} \x{2647} \x{2648} \x{2649} \x{264A} \x{264B} \x{264C} \x{264D} \x{264E} \x{264F}" + text run at (341,331) width 1: " " + text run at (0,352) width 380: "U+265x \x{2650} \x{2651} \x{2652} \x{2653} \x{2654} \x{2655} \x{2656} \x{2657} \x{2658} \x{2659} \x{265A} \x{265B} \x{265C} \x{265D} \x{265E} \x{265F}" + text run at (379,352) width 1: " " + text run at (0,371) width 344: "U+266x \x{2660} \x{2661} \x{2662} \x{2663} \x{2664} \x{2665} \x{2666} \x{2667} \x{2668} \x{2669} \x{266A} \x{266B} \x{266C} \x{266D} \x{266E} \x{266F}" + text run at (343,371) width 1: " " + text run at (0,393) width 365: "U+267x \x{2670} \x{2671} \x{2672} \x{2673} \x{2674} \x{2675} \x{2676} \x{2677} \x{2678} \x{2679} \x{267A} \x{267B} \x{267C} \x{267D} \x{267E} \x{267F}" + text run at (364,393) width 1: " " + text run at (0,411) width 311: "U+268x \x{2680} \x{2681} \x{2682} \x{2683} \x{2684} \x{2685} \x{2686} \x{2687} \x{2688} \x{2689} \x{268A} \x{268B} \x{268C} \x{268D} \x{268E} \x{268F}" + text run at (311,411) width 0: " " + text run at (0,431) width 343: "U+269x \x{2690} \x{2691} \x{2692} \x{2693} \x{2694} \x{2695} \x{2696} \x{2697} \x{2698} \x{2699} \x{269A} \x{269B} \x{269C} \x{269D} \x{269E} \x{269F}" + text run at (342,431) width 1: " " + text run at (0,452) width 354: "U+26Ax \x{26A0} \x{26A1} \x{26A2} \x{26A3} \x{26A4} \x{26A5} \x{26A6} \x{26A7} \x{26A8} \x{26A9} \x{26AA} \x{26AB} \x{26AC} \x{26AD} \x{26AE} \x{26AF}" + text run at (353,452) width 1: " " + text run at (0,474) width 335: "U+26Bx \x{26B0} \x{26B1} \x{26B2} \x{26B3} \x{26B4} \x{26B5} \x{26B6} \x{26B7} \x{26B8} \x{26B9} \x{26BA} \x{26BB} \x{26BC} \x{26BD} \x{26BE} \x{26BF}" + text run at (334,474) width 1: " " + text run at (0,496) width 340: "U+26Cx \x{26C0} \x{26C1} \x{26C2} \x{26C3} \x{26C4} \x{26C5} \x{26C6} \x{26C7} \x{26C8} \x{26C9} \x{26CA} \x{26CB} \x{26CC} \x{26CD} \x{26CE} \x{26CF}" + text run at (339,496) width 1: " " + text run at (0,517) width 333: "U+26Dx \x{26D0} \x{26D1} \x{26D2} \x{26D3} \x{26D4} \x{26D5} \x{26D6} \x{26D7} \x{26D8} \x{26D9} \x{26DA} \x{26DB} \x{26DC} \x{26DD} \x{26DE} \x{26DF}" + text run at (332,517) width 1: " " + text run at (0,538) width 329: "U+26Ex \x{26E0} \x{26E1} \x{26E2} \x{26E3} \x{26E4} \x{26E5} \x{26E6} \x{26E7} \x{26E8} \x{26E9} \x{26EA} \x{26EB} \x{26EC} \x{26ED} \x{26EE} \x{26EF}" + text run at (328,538) width 1: " " + text run at (0,560) width 362: "U+26Fx \x{26F0} \x{26F1} \x{26F2} \x{26F3} \x{26F4} \x{26F5} \x{26F6} \x{26F7} \x{26F8} \x{26F9} \x{26FA} \x{26FB} \x{26FC} \x{26FD} \x{26FE} \x{26FF}" + text run at (361,560) width 1: " " + LayoutText {#text} at (0,577) size 361x229 + text run at (0,577) width 0: " " + text run at (0,596) width 361: "U+270x \x{2700} \x{2701} \x{2702} \x{2703} \x{2704} \x{2705} \x{2706} \x{2707} \x{2708} \x{2709} \x{270A} \x{270B} \x{270C} \x{270D} \x{270E} \x{270F}" + text run at (360,596) width 1: " " + text run at (0,613) width 326: "U+271x \x{2710} \x{2711} \x{2712} \x{2713} \x{2714} \x{2715} \x{2716} \x{2717} \x{2718} \x{2719} \x{271A} \x{271B} \x{271C} \x{271D} \x{271E} \x{271F}" + text run at (325,613) width 1: " " + text run at (0,632) width 338: "U+272x \x{2720} \x{2721} \x{2722} \x{2723} \x{2724} \x{2725} \x{2726} \x{2727} \x{2728} \x{2729} \x{272A} \x{272B} \x{272C} \x{272D} \x{272E} \x{272F}" + text run at (337,632) width 1: " " + text run at (0,649) width 330: "U+273x \x{2730} \x{2731} \x{2732} \x{2733} \x{2734} \x{2735} \x{2736} \x{2737} \x{2738} \x{2739} \x{273A} \x{273B} \x{273C} \x{273D} \x{273E} \x{273F}" + text run at (329,649) width 1: " " + text run at (0,668) width 337: "U+274x \x{2740} \x{2741} \x{2742} \x{2743} \x{2744} \x{2745} \x{2746} \x{2747} \x{2748} \x{2749} \x{274A} \x{274B} \x{274C} \x{274D} \x{274E} \x{274F}" + text run at (336,668) width 1: " " + text run at (0,689) width 312: "U+275x \x{2750} \x{2751} \x{2752} \x{2753} \x{2754} \x{2755} \x{2756} \x{2757} \x{2758} \x{2759} \x{275A} \x{275B} \x{275C} \x{275D} \x{275E} \x{275F}" + text run at (311,689) width 1: " " + text run at (0,706) width 284: "U+276x \x{2760} \x{2761} \x{2762} \x{2763} \x{2764} \x{2765} \x{2766} \x{2767} \x{2768} \x{2769} \x{276A} \x{276B} \x{276C} \x{276D} \x{276E} \x{276F}" + text run at (283,706) width 1: " " + text run at (0,721) width 300: "U+277x \x{2770} \x{2771} \x{2772} \x{2773} \x{2774} \x{2775} \x{2776} \x{2777} \x{2778} \x{2779} \x{277A} \x{277B} \x{277C} \x{277D} \x{277E} \x{277F}" + text run at (299,721) width 1: " " + text run at (0,736) width 336: "U+278x \x{2780} \x{2781} \x{2782} \x{2783} \x{2784} \x{2785} \x{2786} \x{2787} \x{2788} \x{2789} \x{278A} \x{278B} \x{278C} \x{278D} \x{278E} \x{278F}" + text run at (335,736) width 1: " " + text run at (0,755) width 354: "U+279x \x{2790} \x{2791} \x{2792} \x{2793} \x{2794} \x{2795} \x{2796} \x{2797} \x{2798} \x{2799} \x{279A} \x{279B} \x{279C} \x{279D} \x{279E} \x{279F}" + text run at (353,755) width 1: " " + text run at (0,772) width 346: "U+27Ax \x{27A0} \x{27A1} \x{27A2} \x{27A3} \x{27A4} \x{27A5} \x{27A6} \x{27A7} \x{27A8} \x{27A9} \x{27AA} \x{27AB} \x{27AC} \x{27AD} \x{27AE} \x{27AF}" + text run at (345,772) width 1: " " + text run at (0,791) width 357: "U+27Bx \x{27B0} \x{27B1} \x{27B2} \x{27B3} \x{27B4} \x{27B5} \x{27B6} \x{27B7} \x{27B8} \x{27B9} \x{27BA} \x{27BB} \x{27BC} \x{27BD} \x{27BE} \x{27BF}" + text run at (356,791) width 1: " " + LayoutText {#text} at (0,808) size 328x290 + text run at (0,808) width 0: " " + text run at (0,823) width 328: "U+2A0x \x{2A00} \x{2A01} \x{2A02} \x{2A03} \x{2A04} \x{2A05} \x{2A06} \x{2A07} \x{2A08} \x{2A09} \x{2A0A} \x{2A0B} \x{2A0C} \x{2A0D} \x{2A0E} \x{2A0F}" + text run at (327,823) width 1: " " + text run at (0,841) width 291: "U+2A1x \x{2A10} \x{2A11} \x{2A12} \x{2A13} \x{2A14} \x{2A15} \x{2A16} \x{2A17} \x{2A18} \x{2A19} \x{2A1A} \x{2A1B} \x{2A1C} \x{2A1D} \x{2A1E} \x{2A1F}" + text run at (290,841) width 1: " " + text run at (0,859) width 293: "U+2A2x \x{2A20} \x{2A21} \x{2A22} \x{2A23} \x{2A24} \x{2A25} \x{2A26} \x{2A27} \x{2A28} \x{2A29} \x{2A2A} \x{2A2B} \x{2A2C} \x{2A2D} \x{2A2E} \x{2A2F}" + text run at (292,859) width 1: " " + text run at (0,875) width 312: "U+2A3x \x{2A30} \x{2A31} \x{2A32} \x{2A33} \x{2A34} \x{2A35} \x{2A36} \x{2A37} \x{2A38} \x{2A39} \x{2A3A} \x{2A3B} \x{2A3C} \x{2A3D} \x{2A3E} \x{2A3F}" + text run at (311,875) width 1: " " + text run at (0,891) width 287: "U+2A4x \x{2A40} \x{2A41} \x{2A42} \x{2A43} \x{2A44} \x{2A45} \x{2A46} \x{2A47} \x{2A48} \x{2A49} \x{2A4A} \x{2A4B} \x{2A4C} \x{2A4D} \x{2A4E} \x{2A4F}" + text run at (286,891) width 1: " " + text run at (0,907) width 311: "U+2A5x \x{2A50} \x{2A51} \x{2A52} \x{2A53} \x{2A54} \x{2A55} \x{2A56} \x{2A57} \x{2A58} \x{2A59} \x{2A5A} \x{2A5B} \x{2A5C} \x{2A5D} \x{2A5E} \x{2A5F}" + text run at (310,907) width 1: " " + text run at (0,923) width 290: "U+2A6x \x{2A60} \x{2A61} \x{2A62} \x{2A63} \x{2A64} \x{2A65} \x{2A66} \x{2A67} \x{2A68} \x{2A69} \x{2A6A} \x{2A6B} \x{2A6C} \x{2A6D} \x{2A6E} \x{2A6F}" + text run at (289,923) width 1: " " + text run at (0,939) width 310: "U+2A7x \x{2A70} \x{2A71} \x{2A72} \x{2A73} \x{2A74} \x{2A75} \x{2A76} \x{2A77} \x{2A78} \x{2A79} \x{2A7A} \x{2A7B} \x{2A7C} \x{2A7D} \x{2A7E} \x{2A7F}" + text run at (309,939) width 1: " " + text run at (0,955) width 286: "U+2A8x \x{2A80} \x{2A81} \x{2A82} \x{2A83} \x{2A84} \x{2A85} \x{2A86} \x{2A87} \x{2A88} \x{2A89} \x{2A8A} \x{2A8B} \x{2A8C} \x{2A8D} \x{2A8E} \x{2A8F}" + text run at (285,955) width 1: " " + text run at (0,971) width 285: "U+2A9x \x{2A90} \x{2A91} \x{2A92} \x{2A93} \x{2A94} \x{2A95} \x{2A96} \x{2A97} \x{2A98} \x{2A99} \x{2A9A} \x{2A9B} \x{2A9C} \x{2A9D} \x{2A9E} \x{2A9F}" + text run at (284,971) width 1: " " + text run at (0,987) width 301: "U+2AAx \x{2AA0} \x{2AA1} \x{2AA2} \x{2AA3} \x{2AA4} \x{2AA5} \x{2AA6} \x{2AA7} \x{2AA8} \x{2AA9} \x{2AAA} \x{2AAB} \x{2AAC} \x{2AAD} \x{2AAE} \x{2AAF}" + text run at (300,987) width 1: " " + text run at (0,1003) width 295: "U+2ABx \x{2AB0} \x{2AB1} \x{2AB2} \x{2AB3} \x{2AB4} \x{2AB5} \x{2AB6} \x{2AB7} \x{2AB8} \x{2AB9} \x{2ABA} \x{2ABB} \x{2ABC} \x{2ABD} \x{2ABE} \x{2ABF}" + text run at (294,1003) width 1: " " + text run at (0,1019) width 286: "U+2ACx \x{2AC0} \x{2AC1} \x{2AC2} \x{2AC3} \x{2AC4} \x{2AC5} \x{2AC6} \x{2AC7} \x{2AC8} \x{2AC9} \x{2ACA} \x{2ACB} \x{2ACC} \x{2ACD} \x{2ACE} \x{2ACF}" + text run at (285,1019) width 1: " " + text run at (0,1035) width 293: "U+2ADx \x{2AD0} \x{2AD1} \x{2AD2} \x{2AD3} \x{2AD4} \x{2AD5} \x{2AD6} \x{2AD7} \x{2AD8} \x{2AD9} \x{2ADA} \x{2ADB} \x{2ADC} \x{2ADD} \x{2ADE} \x{2ADF}" + text run at (292,1035) width 1: " " + text run at (0,1051) width 303: "U+2AEx \x{2AE0} \x{2AE1} \x{2AE2} \x{2AE3} \x{2AE4} \x{2AE5} \x{2AE6} \x{2AE7} \x{2AE8} \x{2AE9} \x{2AEA} \x{2AEB} \x{2AEC} \x{2AED} \x{2AEE} \x{2AEF}" + text run at (302,1051) width 1: " " + text run at (0,1067) width 269: "U+2AFx \x{2AF0} \x{2AF1} \x{2AF2} \x{2AF3} \x{2AF4} \x{2AF5} \x{2AF6} \x{2AF7} \x{2AF8} \x{2AF9} \x{2AFA} \x{2AFB} \x{2AFC} \x{2AFD} \x{2AFE} \x{2AFF}" + text run at (268,1067) width 1: " " + text run at (0,1083) width 63: " " + LayoutBlockFlow {P} at (0,1172.44) size 769x36 + LayoutText {#text} at (0,0) size 764x36 + text run at (0,0) width 764: "A series of unicode symbols (Runic, General Punctuation, Miscellaneous Symbols, and Mathematical Symbols) should" + text run at (0,18) width 108: "be shown above."
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/updateNewFont-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/updateNewFont-expected.png new file mode 100644 index 0000000..953391e9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/updateNewFont-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/updateNewFont-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/updateNewFont-expected.txt new file mode 100644 index 0000000..2b16c6a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/text/updateNewFont-expected.txt
@@ -0,0 +1,11 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x128 + LayoutBlockFlow {HTML} at (0,0) size 800x128 + LayoutBlockFlow {BODY} at (8,8) size 784x112 + LayoutText {#text} at (0,0) size 0x0 +layer at (8,8) size 34x112 clip at (9,9) size 21x110 + LayoutListBox {SELECT} at (0,0.31) size 33.89x111.69 [bgcolor=#FFFFFF] [border: (1px solid #999999)] + LayoutBlockFlow {OPTION} at (1,1) size 20.89x12.19 + LayoutText {#text} at (2,0) size 17x11 + text run at (2,0) width 17: "test"
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/writing-mode/text-combine-various-fonts-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/writing-mode/text-combine-various-fonts-expected.png new file mode 100644 index 0000000..129f53f --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/writing-mode/text-combine-various-fonts-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/fast/writing-mode/text-combine-various-fonts-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/writing-mode/text-combine-various-fonts-expected.txt new file mode 100644 index 0000000..3fc93374 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac-retina/fast/writing-mode/text-combine-various-fonts-expected.txt
@@ -0,0 +1,423 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (271,0) size 529x600 + LayoutBlockFlow {HTML} at (0,0) size 529x600 + LayoutBlockFlow {BODY} at (8,8) size 513x584 + LayoutBlockFlow {DIV} at (0,0) size 513x584 + LayoutBlockFlow {DIV} at (0,0) size 19x584 + LayoutText {#text} at (0,0) size 18x16 + text run at (0,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,16) size 18x16 + text run at (0,16) width 16: "1" + LayoutText {#text} at (0,32) size 18x16 + text run at (0,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,48) size 18x16 + text run at (0,48) width 16: "23" + LayoutText {#text} at (0,64) size 18x16 + text run at (0,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,80) size 18x16 + text run at (0,80) width 16: "2016" + LayoutText {#text} at (0,96) size 18x16 + text run at (0,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,112) size 18x16 + text run at (0,112) width 16: "45674567" + LayoutText {#text} at (0,128) size 18x16 + text run at (0,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (19,0) size 19x584 + LayoutText {#text} at (0,0) size 18x16 + text run at (0,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,16) size 18x16 + text run at (0,16) width 16: "1" + LayoutText {#text} at (0,32) size 18x16 + text run at (0,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,48) size 18x16 + text run at (0,48) width 16: "23" + LayoutText {#text} at (0,64) size 18x16 + text run at (0,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,80) size 18x16 + text run at (0,80) width 16: "2016" + LayoutText {#text} at (0,96) size 18x16 + text run at (0,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,112) size 18x16 + text run at (0,112) width 16: "45674567" + LayoutText {#text} at (0,128) size 18x16 + text run at (0,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (38,0) size 19x584 + LayoutText {#text} at (0,0) size 18x16 + text run at (0,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,16) size 18x16 + text run at (0,16) width 16: "1" + LayoutText {#text} at (0,32) size 18x16 + text run at (0,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,48) size 18x16 + text run at (0,48) width 16: "23" + LayoutText {#text} at (0,64) size 18x16 + text run at (0,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,80) size 18x16 + text run at (0,80) width 16: "2016" + LayoutText {#text} at (0,96) size 18x16 + text run at (0,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,112) size 18x16 + text run at (0,112) width 16: "45674567" + LayoutText {#text} at (0,128) size 18x16 + text run at (0,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (57,0) size 19x584 + LayoutText {#text} at (1,0) size 16x16 + text run at (1,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,16) size 16x16 + text run at (1,16) width 16: "1" + LayoutText {#text} at (1,32) size 16x16 + text run at (1,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,48) size 16x16 + text run at (1,48) width 16: "23" + LayoutText {#text} at (1,64) size 16x16 + text run at (1,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,80) size 16x16 + text run at (1,80) width 16: "2016" + LayoutText {#text} at (1,96) size 16x16 + text run at (1,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,112) size 16x16 + text run at (1,112) width 16: "45674567" + LayoutText {#text} at (1,128) size 16x16 + text run at (1,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (76,0) size 19x584 + LayoutText {#text} at (1,0) size 16x16 + text run at (1,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,16) size 16x16 + text run at (1,16) width 16: "1" + LayoutText {#text} at (1,32) size 16x16 + text run at (1,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,48) size 16x16 + text run at (1,48) width 16: "23" + LayoutText {#text} at (1,64) size 16x16 + text run at (1,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,80) size 16x16 + text run at (1,80) width 16: "2016" + LayoutText {#text} at (1,96) size 16x16 + text run at (1,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,112) size 16x16 + text run at (1,112) width 16: "45674567" + LayoutText {#text} at (1,128) size 16x16 + text run at (1,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (95,0) size 19x584 + LayoutText {#text} at (1,0) size 16x16 + text run at (1,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,16) size 16x16 + text run at (1,16) width 16: "1" + LayoutText {#text} at (1,32) size 16x16 + text run at (1,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,48) size 16x16 + text run at (1,48) width 16: "23" + LayoutText {#text} at (1,64) size 16x16 + text run at (1,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,80) size 16x16 + text run at (1,80) width 16: "2016" + LayoutText {#text} at (1,96) size 16x16 + text run at (1,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,112) size 16x16 + text run at (1,112) width 16: "45674567" + LayoutText {#text} at (1,128) size 16x16 + text run at (1,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (114,0) size 19x584 + LayoutText {#text} at (1,0) size 16x16 + text run at (1,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,16) size 16x16 + text run at (1,16) width 16: "1" + LayoutText {#text} at (1,32) size 16x16 + text run at (1,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,48) size 16x16 + text run at (1,48) width 16: "23" + LayoutText {#text} at (1,64) size 16x16 + text run at (1,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,80) size 16x16 + text run at (1,80) width 16: "2016" + LayoutText {#text} at (1,96) size 16x16 + text run at (1,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 16x16 + LayoutTextCombine {#text} at (1,112) size 16x16 + text run at (1,112) width 16: "45674567" + LayoutText {#text} at (1,128) size 16x16 + text run at (1,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (133,0) size 19x584 + LayoutText {#text} at (0,0) size 18x16 + text run at (0,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,16) size 18x16 + text run at (0,16) width 16: "1" + LayoutText {#text} at (0,32) size 18x16 + text run at (0,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,48) size 18x16 + text run at (0,48) width 16: "23" + LayoutText {#text} at (0,64) size 18x16 + text run at (0,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,80) size 18x16 + text run at (0,80) width 16: "2016" + LayoutText {#text} at (0,96) size 18x16 + text run at (0,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,112) size 18x16 + text run at (0,112) width 16: "45674567" + LayoutText {#text} at (0,128) size 18x16 + text run at (0,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (152,0) size 304x584 + LayoutBlockFlow {DIV} at (0,0) size 38x584 + LayoutText {#text} at (0,0) size 37x32 + text run at (0,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,32) size 37x32 + text run at (0,32) width 32: "1" + LayoutText {#text} at (0,64) size 37x32 + text run at (0,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,96) size 37x32 + text run at (0,96) width 32: "23" + LayoutText {#text} at (0,128) size 37x32 + text run at (0,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,160) size 37x32 + text run at (0,160) width 32: "2016" + LayoutText {#text} at (0,192) size 37x32 + text run at (0,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,224) size 37x32 + text run at (0,224) width 32: "45674567" + LayoutText {#text} at (0,256) size 37x32 + text run at (0,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (38,0) size 38x584 + LayoutText {#text} at (0,0) size 37x32 + text run at (0,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,32) size 37x32 + text run at (0,32) width 32: "1" + LayoutText {#text} at (0,64) size 37x32 + text run at (0,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,96) size 37x32 + text run at (0,96) width 32: "23" + LayoutText {#text} at (0,128) size 37x32 + text run at (0,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,160) size 37x32 + text run at (0,160) width 32: "2016" + LayoutText {#text} at (0,192) size 37x32 + text run at (0,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,224) size 37x32 + text run at (0,224) width 32: "45674567" + LayoutText {#text} at (0,256) size 37x32 + text run at (0,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (76,0) size 38x584 + LayoutText {#text} at (0,0) size 37x32 + text run at (0,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,32) size 37x32 + text run at (0,32) width 32: "1" + LayoutText {#text} at (0,64) size 37x32 + text run at (0,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,96) size 37x32 + text run at (0,96) width 32: "23" + LayoutText {#text} at (0,128) size 37x32 + text run at (0,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,160) size 37x32 + text run at (0,160) width 32: "2016" + LayoutText {#text} at (0,192) size 37x32 + text run at (0,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,224) size 37x32 + text run at (0,224) width 32: "45674567" + LayoutText {#text} at (0,256) size 37x32 + text run at (0,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (114,0) size 38x584 + LayoutText {#text} at (3,0) size 32x32 + text run at (3,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,32) size 32x32 + text run at (3,32) width 32: "1" + LayoutText {#text} at (3,64) size 32x32 + text run at (3,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,96) size 32x32 + text run at (3,96) width 32: "23" + LayoutText {#text} at (3,128) size 32x32 + text run at (3,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,160) size 32x32 + text run at (3,160) width 32: "2016" + LayoutText {#text} at (3,192) size 32x32 + text run at (3,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,224) size 32x32 + text run at (3,224) width 32: "45674567" + LayoutText {#text} at (3,256) size 32x32 + text run at (3,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (152,0) size 38x584 + LayoutText {#text} at (3,0) size 32x32 + text run at (3,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,32) size 32x32 + text run at (3,32) width 32: "1" + LayoutText {#text} at (3,64) size 32x32 + text run at (3,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,96) size 32x32 + text run at (3,96) width 32: "23" + LayoutText {#text} at (3,128) size 32x32 + text run at (3,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,160) size 32x32 + text run at (3,160) width 32: "2016" + LayoutText {#text} at (3,192) size 32x32 + text run at (3,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,224) size 32x32 + text run at (3,224) width 32: "45674567" + LayoutText {#text} at (3,256) size 32x32 + text run at (3,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (190,0) size 38x584 + LayoutText {#text} at (3,0) size 32x32 + text run at (3,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,32) size 32x32 + text run at (3,32) width 32: "1" + LayoutText {#text} at (3,64) size 32x32 + text run at (3,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,96) size 32x32 + text run at (3,96) width 32: "23" + LayoutText {#text} at (3,128) size 32x32 + text run at (3,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,160) size 32x32 + text run at (3,160) width 32: "2016" + LayoutText {#text} at (3,192) size 32x32 + text run at (3,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,224) size 32x32 + text run at (3,224) width 32: "45674567" + LayoutText {#text} at (3,256) size 32x32 + text run at (3,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (228,0) size 38x584 + LayoutText {#text} at (3,0) size 32x32 + text run at (3,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,32) size 32x32 + text run at (3,32) width 32: "1" + LayoutText {#text} at (3,64) size 32x32 + text run at (3,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,96) size 32x32 + text run at (3,96) width 32: "23" + LayoutText {#text} at (3,128) size 32x32 + text run at (3,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,160) size 32x32 + text run at (3,160) width 32: "2016" + LayoutText {#text} at (3,192) size 32x32 + text run at (3,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 32x32 + LayoutTextCombine {#text} at (3,224) size 32x32 + text run at (3,224) width 32: "45674567" + LayoutText {#text} at (3,256) size 32x32 + text run at (3,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (266,0) size 38x584 + LayoutText {#text} at (0,0) size 37x32 + text run at (0,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,32) size 37x32 + text run at (0,32) width 32: "1" + LayoutText {#text} at (0,64) size 37x32 + text run at (0,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,96) size 37x32 + text run at (0,96) width 32: "23" + LayoutText {#text} at (0,128) size 37x32 + text run at (0,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,160) size 37x32 + text run at (0,160) width 32: "2016" + LayoutText {#text} at (0,192) size 37x32 + text run at (0,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,224) size 37x32 + text run at (0,224) width 32: "45674567" + LayoutText {#text} at (0,256) size 37x32 + text run at (0,256) width 32: "\x{56FD}" + LayoutBlockFlow {DIV} at (456,0) size 57x584 + LayoutBlockFlow {DIV} at (0,0) size 19x584 + LayoutText {#text} at (0,0) size 18x16 + text run at (0,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,16) size 18x16 + text run at (0,16) width 16: "1" + LayoutText {#text} at (0,32) size 18x16 + text run at (0,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,48) size 18x16 + text run at (0,48) width 16: "23" + LayoutText {#text} at (0,64) size 18x16 + text run at (0,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,80) size 18x16 + text run at (0,80) width 16: "2016" + LayoutText {#text} at (0,96) size 18x16 + text run at (0,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,112) size 18x16 + text run at (0,112) width 16: "45674567" + LayoutText {#text} at (0,128) size 18x16 + text run at (0,128) width 16: "\x{56FD}" + LayoutBlockFlow {DIV} at (19,0) size 38x584 + LayoutBlockFlow {DIV} at (0,0) size 38x584 + LayoutText {#text} at (0,0) size 37x32 + text run at (0,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,32) size 37x32 + text run at (0,32) width 32: "1" + LayoutText {#text} at (0,64) size 37x32 + text run at (0,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,96) size 37x32 + text run at (0,96) width 32: "23" + LayoutText {#text} at (0,128) size 37x32 + text run at (0,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,160) size 37x32 + text run at (0,160) width 32: "2016" + LayoutText {#text} at (0,192) size 37x32 + text run at (0,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,224) size 37x32 + text run at (0,224) width 32: "45674567" + LayoutText {#text} at (0,256) size 37x32 + text run at (0,256) width 32: "\x{56FD}"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/basic/001-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/basic/001-expected.png index b9409a0..a2a49ae 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/basic/001-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/basic/001-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/float/float-avoidance-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/float/float-avoidance-expected.png index 4bd985d..df9b3b3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/float/float-avoidance-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/float/float-avoidance-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/float/intruding-painted-twice-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/float/intruding-painted-twice-expected.png index 98cb112..c891f89 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/float/intruding-painted-twice-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/float/intruding-painted-twice-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/margin-collapse/103-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/margin-collapse/103-expected.png index a79a9b1..2697a553 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/margin-collapse/103-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/margin-collapse/103-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/margin-collapse/103-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/block/margin-collapse/103-expected.txt index 9479e05f..044c623 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/margin-collapse/103-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/margin-collapse/103-expected.txt
@@ -46,15 +46,15 @@ text run at (0,2) width 115: "Your year of study*" LayoutMenuList {SELECT} at (325,82) size 180x18 [bgcolor=#F8F8F8] LayoutBlockFlow (anonymous) at (0,0) size 180x18 - LayoutText (anonymous) at (8,2) size 121x13 - text run at (8,2) width 121: "Years you've been here" + LayoutText (anonymous) at (8,2) size 122x13 + text run at (8,2) width 122: "Years you've been here" LayoutBlockFlow (floating) {SPAN} at (0,106) size 325x20 [color=#333333] LayoutText {#text} at (0,2) size 157x16 text run at (0,2) width 157: "Shakespeare classes taken" LayoutMenuList {SELECT} at (325,100) size 180x18 [bgcolor=#F8F8F8] LayoutBlockFlow (anonymous) at (0,0) size 180x18 - LayoutText (anonymous) at (8,2) size 73x13 - text run at (8,2) width 73: "Number taken" + LayoutText (anonymous) at (8,2) size 74x13 + text run at (8,2) width 74: "Number taken" LayoutBlockFlow {P} at (0,131.33) size 560x20 [color=#333333] LayoutText {#text} at (0,2) size 161x16 text run at (0,2) width 161: "* indicates a required field" @@ -115,8 +115,8 @@ text run at (0,2) width 282: "Which area of the ISE did you find most useful?" LayoutMenuList {SELECT} at (325,415.98) size 180x18 [bgcolor=#F8F8F8] LayoutBlockFlow (anonymous) at (0,0) size 180x18 - LayoutText (anonymous) at (8,2) size 99x13 - text run at (8,2) width 99: "Sections of the ISE" + LayoutText (anonymous) at (8,2) size 98x13 + text run at (8,2) width 98: "Sections of the ISE" LayoutBlockFlow (floating) {SPAN} at (0,435.98) size 325x20 [color=#333333] LayoutText {#text} at (0,2) size 257x16 text run at (0,2) width 257: "How did you find the navigation of the ISE?"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/047-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/047-expected.png index f8ca3a3..f819621 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/047-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/047-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/inline-block-relposition-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/inline-block-relposition-expected.png index 91df33ad5..68a641f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/inline-block-relposition-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/inline-block-relposition-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/inline-block-relposition-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/inline-block-relposition-expected.txt index 29097d9..177f0b3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/inline-block-relposition-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/block/positioning/inline-block-relposition-expected.txt
@@ -10,6 +10,6 @@ LayoutText {#text} at (19,0) size 46x13 text run at (19,0) width 46: "Click Me" layer at (88,23) size 23x13 - LayoutBlockFlow (positioned) {DIV} at (80.03,15) size 22.97x13 - LayoutText {#text} at (0,0) size 23x13 - text run at (0,0) width 23: "Now" + LayoutBlockFlow (positioned) {DIV} at (79.81,15) size 23.19x13 + LayoutText {#text} at (0,0) size 24x13 + text run at (0,0) width 24: "Now"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/borderRadiusAllStylesAllCorners-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/borderRadiusAllStylesAllCorners-expected.png index c8700a7..add80dc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/borderRadiusAllStylesAllCorners-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/borderRadiusAllStylesAllCorners-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/inline-mask-overlay-image-outset-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/inline-mask-overlay-image-outset-expected.png index 2fe6dd9..ac1bb8f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/borders/inline-mask-overlay-image-outset-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/borders/inline-mask-overlay-image-outset-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/box-shadow/inset-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/box-shadow/inset-expected.png index b184bc5..f8ff6cb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/box-shadow/inset-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/box-shadow/inset-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/box-shadow/inset-subpixel-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/box-shadow/inset-subpixel-expected.png index da6347e2..e127032 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/box-shadow/inset-subpixel-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/box-shadow/inset-subpixel-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css-generated-content/012-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css-generated-content/012-expected.png index a5d40b8a..1c6fa60 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css-generated-content/012-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css-generated-content/012-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css-generated-content/014-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css-generated-content/014-expected.png index e60a978..ee74cdf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css-generated-content/014-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css-generated-content/014-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/acid2-pixel-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/acid2-pixel-expected.png index e2836b18..8122dd6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/acid2-pixel-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/acid2-pixel-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/clip-zooming-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/clip-zooming-expected.png index 2662779..bc342cc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/clip-zooming-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/clip-zooming-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/continuationCrash-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/continuationCrash-expected.png index a7b8227..a821aaf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/continuationCrash-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/continuationCrash-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/continuationCrash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/css/continuationCrash-expected.txt index a209f0a..e22b523 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/continuationCrash-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/continuationCrash-expected.txt
@@ -47,20 +47,20 @@ LayoutText {#text} at (0,0) size 205x18 text run at (0,0) width 205: "2. 3. will not crash Safari either." LayoutBlockFlow (anonymous) at (40,144) size 744x19 - LayoutButton {INPUT} at (0,1) size 130.53x18 [bgcolor=#C0C0C0] - LayoutBlockFlow (anonymous) at (8,2) size 114.53x13 + LayoutButton {INPUT} at (0,1) size 130.64x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 114.64x13 LayoutText {#text} at (0,0) size 115x13 text run at (0,0) width 115: "1. Set outline property" LayoutText {#text} at (130,0) size 5x18 text run at (130,0) width 5: " " - LayoutButton {INPUT} at (134.53,1) size 133.58x18 [bgcolor=#C0C0C0] - LayoutBlockFlow (anonymous) at (8,2) size 117.58x13 + LayoutButton {INPUT} at (134.64,1) size 133.80x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 117.80x13 LayoutText {#text} at (0,0) size 118x13 text run at (0,0) width 118: "2. Set display property" LayoutText {#text} at (268,0) size 5x18 text run at (268,0) width 5: " " - LayoutButton {INPUT} at (272.11,1) size 145.05x18 [bgcolor=#C0C0C0] - LayoutBlockFlow (anonymous) at (8,2) size 129.05x13 + LayoutButton {INPUT} at (272.44,1) size 145.58x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 129.58x13 LayoutText {#text} at (0,0) size 130x13 text run at (0,0) width 130: "3. Replace span-element" LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/h1-in-section-elements-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/h1-in-section-elements-expected.png index 12a1c5e5..bd8fbb5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/h1-in-section-elements-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/h1-in-section-elements-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/input-search-padding-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/input-search-padding-expected.png index fabc1455..4fe11a8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/input-search-padding-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/input-search-padding-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/line-height-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/line-height-expected.png index e2b163c..b384ddb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/line-height-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/line-height-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/line-height-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/css/line-height-expected.txt index b24c1f4e..df916fb9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/line-height-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/line-height-expected.txt
@@ -20,5 +20,5 @@ text run at (0,18) width 64: "vertically." layer at (11,29) size 125x13 LayoutBlockFlow {DIV} at (3,3) size 125x13 - LayoutText {#text} at (0,0) size 67x13 - text run at (0,0) width 67: "Lorem Ipsum" + LayoutText {#text} at (0,0) size 68x13 + text run at (0,0) width 68: "Lorem Ipsum"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/margin-top-bottom-dynamic-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/margin-top-bottom-dynamic-expected.png index cfbad945..02ed306 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/margin-top-bottom-dynamic-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/margin-top-bottom-dynamic-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/margin-top-bottom-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/css/margin-top-bottom-dynamic-expected.txt index a0b36ae..5d75682 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/margin-top-bottom-dynamic-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/margin-top-bottom-dynamic-expected.txt
@@ -35,14 +35,14 @@ text run at (1,1) width 86: "Lorem ipsum" LayoutBlockFlow (anonymous) at (0,270) size 784x37 LayoutBR {BR} at (0,0) size 0x18 - LayoutButton {INPUT} at (0,19) size 100.56x18 [bgcolor=#C0C0C0] - LayoutBlockFlow (anonymous) at (8,2) size 84.56x13 + LayoutButton {INPUT} at (0,19) size 100.94x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 84.94x13 LayoutText {#text} at (0,0) size 85x13 text run at (0,0) width 85: "Negative margin" LayoutText {#text} at (100,18) size 5x18 text run at (100,18) width 5: " " - LayoutButton {INPUT} at (104.56,19) size 95.14x18 [bgcolor=#C0C0C0] - LayoutBlockFlow (anonymous) at (8,2) size 79.14x13 + LayoutButton {INPUT} at (104.94,19) size 95.67x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 79.67x13 LayoutText {#text} at (0,0) size 80x13 text run at (0,0) width 80: "Positive margin" LayoutText {#text} at (0,0) size 0x0 @@ -58,14 +58,14 @@ text run at (1,1) width 86: "Lorem ipsum" LayoutBlockFlow (anonymous) at (0,429) size 784x37 LayoutBR {BR} at (0,0) size 0x18 - LayoutButton {INPUT} at (0,19) size 100.56x18 [bgcolor=#C0C0C0] - LayoutBlockFlow (anonymous) at (8,2) size 84.56x13 + LayoutButton {INPUT} at (0,19) size 100.94x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 84.94x13 LayoutText {#text} at (0,0) size 85x13 text run at (0,0) width 85: "Negative margin" LayoutText {#text} at (100,18) size 5x18 text run at (100,18) width 5: " " - LayoutButton {INPUT} at (104.56,19) size 95.14x18 [bgcolor=#C0C0C0] - LayoutBlockFlow (anonymous) at (8,2) size 79.14x13 + LayoutButton {INPUT} at (104.94,19) size 95.67x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 79.67x13 LayoutText {#text} at (0,0) size 80x13 text run at (0,0) width 80: "Positive margin" LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/rem-calc-dynamic-scaling-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/rem-calc-dynamic-scaling-expected.png index 73d6433c..dc4d98b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/rem-calc-dynamic-scaling-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/rem-calc-dynamic-scaling-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/rem-dynamic-scaling-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/rem-dynamic-scaling-expected.png index 73d6433c..dc4d98b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/rem-dynamic-scaling-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/rem-dynamic-scaling-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/dnd/link-dragging-draggable-div-with-dragged-link-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/dnd/link-dragging-draggable-div-with-dragged-link-expected.png index 57036e8..17081c5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/dnd/link-dragging-draggable-div-with-dragged-link-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/dnd/link-dragging-draggable-div-with-dragged-link-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/dnd/link-dragging-non-draggable-link-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/dnd/link-dragging-non-draggable-link-expected.png index 7c077df..d642e7f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/dnd/link-dragging-non-draggable-link-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/dnd/link-dragging-non-draggable-link-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLInputElement/input-image-alt-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLInputElement/input-image-alt-text-expected.png index dcabc0e8..811cf26 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLInputElement/input-image-alt-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLInputElement/input-image-alt-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLInputElement/input-image-alt-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLInputElement/input-image-alt-text-expected.txt index b85e24f..5bc141f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLInputElement/input-image-alt-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLInputElement/input-image-alt-text-expected.txt
@@ -10,16 +10,16 @@ text run at (0,18) width 229: "twice, followed by a blue rectangle." LayoutBlockFlow {P} at (0,52) size 784x0 LayoutBlockFlow {FORM} at (0,52) size 784x94 - LayoutBlockFlow {INPUT} at (0,0) size 47.44x17 + LayoutBlockFlow {INPUT} at (0,0) size 47.55x17 LayoutBR {BR} at (47,17) size 1x0 LayoutBlockFlow {INPUT} at (0,17) size 102x52 [border: (1px solid #000000)] LayoutBR {BR} at (102,68) size 0x0 LayoutImage {INPUT} at (0,69) size 75x25 LayoutBR {BR} at (75,94) size 0x0 -layer at (8,60) size 47x17 clip at (9,61) size 45x15 - LayoutBlockFlow {DIV} at (0,0) size 47.44x17 [border: (1px solid #C0C0C0)] -layer at (10,62) size 43x13 - LayoutBlockFlow {DIV} at (2,2) size 43.44x13 +layer at (8,60) size 48x17 clip at (9,61) size 46x15 + LayoutBlockFlow {DIV} at (0,0) size 47.55x17 [border: (1px solid #C0C0C0)] +layer at (10,62) size 44x13 + LayoutBlockFlow {DIV} at (2,2) size 43.55x13 LayoutText {#text} at (0,0) size 44x13 text run at (0,0) width 44: "Success" layer at (9,78) size 100x50 clip at (10,79) size 98x48
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-optimums-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-optimums-expected.png index d22d96db3..9003d82 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-optimums-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLMeterElement/meter-optimums-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.png index 47a8cd0..ec7744f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.txt index 3b2e158..46b07b8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/dom/HTMLTableColElement/resize-table-using-col-width-expected.txt
@@ -30,9 +30,9 @@ LayoutText {#text} at (2,2) size 73x18 text run at (2,2) width 73: "col 3 row 3" LayoutBlockFlow (anonymous) at (0,52) size 784x18 - LayoutButton {BUTTON} at (0,0) size 355.27x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] - LayoutBlockFlow (anonymous) at (8,2) size 339.27x13 - LayoutText {#text} at (0,0) size 340x13 - text run at (0,0) width 340: "Click me to test manually. The first column should grow to 500px." + LayoutButton {BUTTON} at (0,0) size 357.17x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 341.17x13 + LayoutText {#text} at (0,0) size 342x13 + text run at (0,0) width 342: "Click me to test manually. The first column should grow to 500px." LayoutText {#text} at (0,0) size 0x0 LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/dynamic/008-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/dynamic/008-expected.png index 41c33758..d3f9ce52 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/dynamic/008-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/dynamic/008-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/dynamic/012-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/dynamic/012-expected.png index 8c5ef4fd..2109e468 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/dynamic/012-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/dynamic/012-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/dynamic/positioned-movement-with-positioned-children-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/dynamic/positioned-movement-with-positioned-children-expected.txt index aa4a0052..2afa66ff 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/dynamic/positioned-movement-with-positioned-children-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/dynamic/positioned-movement-with-positioned-children-expected.txt
@@ -14,8 +14,8 @@ LayoutBlockFlow (positioned) {DIV} at (0,0) size 100x118 LayoutBlockFlow {DIV} at (0,0) size 100x100 [bgcolor=#008000] LayoutBlockFlow (anonymous) at (0,100) size 100x18 - LayoutButton {BUTTON} at (0,0) size 50.48x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] - LayoutBlockFlow (anonymous) at (8,2) size 34.48x13 + LayoutButton {BUTTON} at (0,0) size 50.58x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 34.58x13 LayoutText {#text} at (0,0) size 35x13 text run at (0,0) width 35: "Button" LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/events/autoscroll-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/events/autoscroll-expected.png index 45c220f..65037c2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/events/autoscroll-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/events/autoscroll-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/events/context-no-deselect-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/events/context-no-deselect-expected.png index 2f08c7a..2527bbfb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/events/context-no-deselect-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/events/context-no-deselect-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/files/file-in-input-display-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/files/file-in-input-display-expected.png index b6069d39..6223e5b7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/files/file-in-input-display-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/files/file-in-input-display-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/inline/absolute-positioned-inline-in-centred-block-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/inline/absolute-positioned-inline-in-centred-block-expected.png index e5684878..7306d228 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/inline/absolute-positioned-inline-in-centred-block-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/inline/absolute-positioned-inline-in-centred-block-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks-expected.png index ec3bb0e..8740f2e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/invalid/014-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/invalid/014-expected.png index 6cbaa21..186b98b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/invalid/014-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/invalid/014-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/dynamic-marker-crash-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/dynamic-marker-crash-expected.png index af30f9c3..1b06491 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/dynamic-marker-crash-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/dynamic-marker-crash-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/ordered-list-with-no-ol-tag-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/ordered-list-with-no-ol-tag-expected.png index b5be16c..272e183 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/lists/ordered-list-with-no-ol-tag-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/lists/ordered-list-with-no-ol-tag-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png index 1e71d99..455cf9a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/multicol/multicol-with-child-renderLayer-for-input-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/multicol/multicol-with-child-renderLayer-for-input-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/multicol/multicol-with-child-renderLayer-for-input-expected.txt index 2a8707f..6589629 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/multicol/multicol-with-child-renderLayer-for-input-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/multicol/multicol-with-child-renderLayer-for-input-expected.txt
@@ -24,6 +24,6 @@ LayoutTextControl (relative positioned) {INPUT} at (143.73,97) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] layer at (155,108) size 125x13 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 LayoutBlockFlow {DIV} at (3,3) size 125x13 - LayoutText {#text} at (0,0) size 38x13 - text run at (0,0) width 38: "Testing" + LayoutText {#text} at (0,0) size 39x13 + text run at (0,0) width 39: "Testing" caret: position 7 of child 0 {#text} of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-x-y-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-x-y-expected.png index 75e5f6e5..239c3e4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-x-y-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-x-y-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-x-y-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-x-y-expected.txt index 48948c133..638dc468 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-x-y-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/overflow-x-y-expected.txt
@@ -75,10 +75,10 @@ layer at (8,241) size 141x32 clip at (9,242) size 124x30 LayoutTextControl {TEXTAREA} at (0,15) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (3,3) size 120x13 - LayoutText {#text} at (0,0) size 87x13 - text run at (0,0) width 87: "Textarea y-scroll" + LayoutText {#text} at (0,0) size 89x13 + text run at (0,0) width 89: "Textarea y-scroll" layer at (153,226) size 141x47 clip at (154,227) size 139x30 LayoutTextControl {TEXTAREA} at (145,0) size 141x47 [bgcolor=#FFFFFF] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (3,3) size 135x13 - LayoutText {#text} at (0,0) size 87x13 - text run at (0,0) width 87: "Textarea x-scroll" + LayoutText {#text} at (0,0) size 88x13 + text run at (0,0) width 88: "Textarea x-scroll"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png index a68aaeb..30d80ad 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.txt index 9faa65ef..bb84c3c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.txt
@@ -12,8 +12,8 @@ text run at (0,0) width 571: "This tests that we can scroll to reveal something in a nested positioned block in overflow." LayoutBlockFlow {DIV} at (0,18) size 570.41x800 LayoutBlockFlow (anonymous) at (0,818) size 570.41x18 - LayoutButton {INPUT} at (0,0) size 198.05x18 [bgcolor=#C0C0C0] - LayoutBlockFlow (anonymous) at (8,2) size 182.05x13 + LayoutButton {INPUT} at (0,0) size 198.50x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 182.50x13 LayoutText {#text} at (0,0) size 183x13 text run at (0,0) width 183: "If you can see this, test has passed" LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scrollRevealButton-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scrollRevealButton-expected.png index d11e8bf..71013da 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scrollRevealButton-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scrollRevealButton-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scrollRevealButton-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scrollRevealButton-expected.txt index 0db695e..dad32eae 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scrollRevealButton-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/overflow/scrollRevealButton-expected.txt
@@ -33,8 +33,8 @@ LayoutBlockFlow {DIV} at (0,18) size 135x500 LayoutBlockFlow (anonymous) at (0,518) size 135x36 LayoutBR {BR} at (0,0) size 0x18 - LayoutButton {INPUT} at (0,18) size 50.48x18 [bgcolor=#C0C0C0] - LayoutBlockFlow (anonymous) at (8,2) size 34.48x13 + LayoutButton {INPUT} at (0,18) size 50.58x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 34.58x13 LayoutText {#text} at (0,0) size 35x13 text run at (0,0) width 35: "Button" LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/parser/document-write-option-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/parser/document-write-option-expected.png index eefd03c..1d98e74 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/parser/document-write-option-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/parser/document-write-option-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/parser/document-write-option-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/parser/document-write-option-expected.txt index d6a8e39..49147d6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/parser/document-write-option-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/parser/document-write-option-expected.txt
@@ -3,8 +3,8 @@ layer at (0,0) size 800x600 LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutBlockFlow {BODY} at (8,8) size 784x584 - LayoutMenuList {SELECT} at (0,0) size 313x18 [bgcolor=#F8F8F8] - LayoutBlockFlow (anonymous) at (0,0) size 313x18 - LayoutText (anonymous) at (8,2) size 282x13 - text run at (8,2) width 282: "This is a very long string so it makes the select bigger." + LayoutMenuList {SELECT} at (0,0) size 314x18 [bgcolor=#F8F8F8] + LayoutBlockFlow (anonymous) at (0,0) size 314x18 + LayoutText (anonymous) at (8,2) size 283x13 + text run at (8,2) width 283: "This is a very long string so it makes the select bigger." LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/parser/entity-comment-in-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/parser/entity-comment-in-textarea-expected.png index b7b30b5..b64d86300 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/parser/entity-comment-in-textarea-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/parser/entity-comment-in-textarea-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/parser/open-comment-in-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/parser/open-comment-in-textarea-expected.png index 372b4fa..3366435e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/parser/open-comment-in-textarea-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/parser/open-comment-in-textarea-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/parser/open-comment-in-textarea-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/parser/open-comment-in-textarea-expected.txt index a0dd458..681a9386 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/parser/open-comment-in-textarea-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/parser/open-comment-in-textarea-expected.txt
@@ -8,11 +8,11 @@ layer at (8,8) size 141x32 clip at (9,9) size 124x30 scrollHeight 56 LayoutTextControl {TEXTAREA} at (0,0) size 141x32 [bgcolor=#FFFFFF] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (3,3) size 120x52 - LayoutText {#text} at (0,0) size 118x39 + LayoutText {#text} at (0,0) size 117x39 text run at (0,0) width 21: "<!--" text run at (20,0) width 1: " " text run at (0,13) width 114: "This should be part of" - text run at (113,13) width 5: " " + text run at (113,13) width 4: " " text run at (0,26) width 66: "the textarea." text run at (65,26) width 1: " " LayoutBR {BR} at (0,39) size 0x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.png index c7a393e8..cd590c2e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.txt index e27ac40..e0e3696 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-expected.txt
@@ -19,14 +19,14 @@ LayoutText {#text} at (0,0) size 27x13 text run at (0,0) width 27: "input" LayoutText {#text} at (0,0) size 0x0 - LayoutButton {BUTTON} at (1,129) size 50.02x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] - LayoutBlockFlow (anonymous) at (8,2) size 34.02x13 - LayoutText {#text} at (0,0) size 34x13 - text run at (0,0) width 34: "button" - LayoutButton {BUTTON} at (1,147) size 50.02x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] - LayoutBlockFlow (anonymous) at (8,2) size 34.02x13 - LayoutText {#text} at (0,0) size 34x13 - text run at (0,0) width 34: "button" + LayoutButton {BUTTON} at (1,129) size 50.09x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 34.09x13 + LayoutText {#text} at (0,0) size 35x13 + text run at (0,0) width 35: "button" + LayoutButton {BUTTON} at (1,147) size 50.09x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 34.09x13 + LayoutText {#text} at (0,0) size 35x13 + text run at (0,0) width 35: "button" LayoutText {#text} at (0,0) size 0x0 LayoutMenuList {SELECT} at (1,165) size 63x18 [bgcolor=#F8F8F8] LayoutBlockFlow (anonymous) at (0,0) size 63x18 @@ -51,13 +51,13 @@ layer at (12,31) size 125x13 LayoutBlockFlow {DIV} at (3,3) size 125x13 layer at (9,209) size 48x45 clip at (10,210) size 35x43 - LayoutListBox {SELECT} at (1,201.44) size 48.36x44.56 [bgcolor=#FFFFFF] [border: (1px solid #999999)] - LayoutBlockFlow {OPTION} at (1,1) size 35.36x14.19 + LayoutListBox {SELECT} at (1,201.44) size 48.25x44.56 [bgcolor=#FFFFFF] [border: (1px solid #999999)] + LayoutBlockFlow {OPTION} at (1,1) size 35.25x14.19 LayoutText {#text} at (2,0) size 32x13 text run at (2,0) width 32: "select" layer at (9,254) size 48x45 clip at (10,255) size 35x43 - LayoutListBox {SELECT} at (1,246.44) size 48.36x44.56 [bgcolor=#FFFFFF] [border: (1px solid #999999)] - LayoutBlockFlow {OPTION} at (1,1) size 35.36x14.19 + LayoutListBox {SELECT} at (1,246.44) size 48.25x44.56 [bgcolor=#FFFFFF] [border: (1px solid #999999)] + LayoutBlockFlow {OPTION} at (1,1) size 35.25x14.19 LayoutText {#text} at (2,0) size 32x13 text run at (2,0) width 32: "select" layer at (9,373) size 27x27
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-mixture-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-mixture-expected.png index c169fca64..76eb15b0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-mixture-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/replaced-breaking-mixture-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/width100percent-button-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/width100percent-button-expected.png index d34ac90b..fdb99d6a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/width100percent-button-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/replaced/width100percent-button-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/selectors/064-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/selectors/064-expected.png index e91d1382..6cd87c4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/selectors/064-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/selectors/064-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/selectors/064-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/selectors/064-expected.txt index 6df64fd8..c28976c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/selectors/064-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/selectors/064-expected.txt
@@ -10,8 +10,8 @@ text run at (0,0) width 286: "This text should turn green while it is active." LayoutText {#text} at (0,0) size 0x0 LayoutBlockFlow {P} at (0,34) size 784x19 [color=#00FF00] - LayoutButton {BUTTON} at (0,1) size 244.48x18 [color=#000000] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] - LayoutBlockFlow (anonymous) at (8,2) size 228.48x13 + LayoutButton {BUTTON} at (0,1) size 244.94x18 [color=#000000] [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 228.94x13 LayoutText {#text} at (0,0) size 229x13 text run at (0,0) width 229: "This text should turn green while it is active." LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/selectors/166-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/selectors/166-expected.png index 9ac3601..23fb09e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/selectors/166-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/selectors/166-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/spatial-navigation/snav-multiple-select-focusring-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/spatial-navigation/snav-multiple-select-focusring-expected.png index 7cb96261..b1940ab 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/spatial-navigation/snav-multiple-select-focusring-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/spatial-navigation/snav-multiple-select-focusring-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/spatial-navigation/snav-multiple-select-focusring-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/spatial-navigation/snav-multiple-select-focusring-expected.txt index 57963a0c..9f557be 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/spatial-navigation/snav-multiple-select-focusring-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/spatial-navigation/snav-multiple-select-focusring-expected.txt
@@ -5,11 +5,11 @@ LayoutBlockFlow {BODY} at (8,8) size 784x59 LayoutText {#text} at (0,0) size 0x0 LayoutText {#text} at (0,0) size 0x0 -layer at (8,8) size 352x59 clip at (9,9) size 339x57 - LayoutListBox {SELECT} at (0,0.25) size 352x58.75 [bgcolor=#FFFFFF] [border: (1px solid #999999)] - LayoutBlockFlow {OPTION} at (1,1) size 339x14.19 [color=#FFFFFF] [bgcolor=#0069D9] - LayoutText {#text} at (2,0) size 335x13 - text run at (2,0) width 335: "make-the-item-long-enough-to-make-a-difference-in-pixel-test" - LayoutBlockFlow {OPTION} at (1,15.19) size 339x14.19 +layer at (8,8) size 354x59 clip at (9,9) size 341x57 + LayoutListBox {SELECT} at (0,0.25) size 353.50x58.75 [bgcolor=#FFFFFF] [border: (1px solid #999999)] + LayoutBlockFlow {OPTION} at (1,1) size 340.50x14.19 [color=#FFFFFF] [bgcolor=#0069D9] + LayoutText {#text} at (2,0) size 337x13 + text run at (2,0) width 337: "make-the-item-long-enough-to-make-a-difference-in-pixel-test" + LayoutBlockFlow {OPTION} at (1,15.19) size 340.50x14.19 LayoutText {#text} at (2,0) size 7x13 text run at (2,0) width 7: "b"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/append-cells2-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/append-cells2-expected.png index e4dc8ed..c523c41 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/append-cells2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/append-cells2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/append-cells2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/table/append-cells2-expected.txt index 9682756..bbd0af4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/append-cells2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/append-cells2-expected.txt
@@ -76,13 +76,13 @@ LayoutText {#text} at (0,0) size 4x18 text run at (0,0) width 4: " " LayoutBlockFlow (anonymous) at (0,124) size 784x19 - LayoutButton {BUTTON} at (0,1) size 43.09x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] - LayoutBlockFlow (anonymous) at (8,2) size 27.09x13 + LayoutButton {BUTTON} at (0,1) size 43.31x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 27.31x13 LayoutText {#text} at (0,0) size 28x13 text run at (0,0) width 28: "show" LayoutText {#text} at (43,0) size 5x18 text run at (43,0) width 5: " " - LayoutButton {BUTTON} at (47.09,1) size 38.28x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutButton {BUTTON} at (47.31,1) size 38.28x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (8,2) size 22.28x13 LayoutText {#text} at (0,0) size 23x13 text run at (0,0) width 23: "hide"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-collapsed-border-expected.png index c5bc6c2..a5ab1e8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-expected.png index d6a6512..7e2fefd0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-collapsed-border-expected.png index 9f1ee845..8be7cd682 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-expected.png index 77fdce6..504fd77 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-group-collapsed-border-expected.png index 975b8d03..660b92a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-expected.png index 202652bb..554476a5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-collapsed-border-expected.png index 523fe9e..8ab1500f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-expected.png index fe0322f..44f882f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-quirks-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-collapsed-border-expected.png index 4891242..e31e0326 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-expected.png index 261f23e..873add07 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-collapsed-border-expected.png index 7df742e..b5264bc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_border-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-collapsed-border-expected.png index abf36394..c422bb63 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-expected.png index b91877f..fac1d1c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_layers-hide-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-cell-expected.png index 19c3ffde..f0fd7ff6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-collapsed-border-expected.png index f242a6c..8302b041 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-collapsed-border-expected.png index 5e37186d..f38c6d2e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-expected.png index 445938af4..9e3050a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-collapsed-border-expected.png index db47f1bc..abc1059706 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-expected.png index 545922f..a314ab0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-expected.png index f06dc82e..0a5cf45 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-collapsed-border-expected.png index 5a6c7f31..e74a985 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-expected.png index 782e5e0..6f998e4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-collapsed-border-expected.png index a18e15dc..ff8b0c08 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_position-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-collapsed-border-expected.png index 7784140e..1c120ab 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-expected.png index 463591e..23efd1c8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-cell-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-collapsed-border-expected.png index 9b8c244d..77d690ec0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-expected.png index 1d4af9b2..022f858 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png index b7f45d0..02105e1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-expected.png index aa3ac26..c38ab52c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-column-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-collapsed-border-expected.png index bd5aecd..ced1a71 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-expected.png index a41563f..7981272 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png index f25bdad..8094386b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/backgr_simple-table-row-group-collapsed-border-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/remove-td-display-none-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/remove-td-display-none-expected.png index 3a976f7..8726d85 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/remove-td-display-none-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/remove-td-display-none-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/remove-td-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/table/remove-td-display-none-expected.txt index 10aa5119..3c07230 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/remove-td-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/remove-td-display-none-expected.txt
@@ -53,13 +53,13 @@ LayoutText {#text} at (0,0) size 8x18 text run at (0,0) width 8: "4" LayoutBlockFlow (anonymous) at (0,88) size 784x19 - LayoutButton {BUTTON} at (0,1) size 43.09x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] - LayoutBlockFlow (anonymous) at (8,2) size 27.09x13 + LayoutButton {BUTTON} at (0,1) size 43.31x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutBlockFlow (anonymous) at (8,2) size 27.31x13 LayoutText {#text} at (0,0) size 28x13 text run at (0,0) width 28: "show" LayoutText {#text} at (43,0) size 5x18 text run at (43,0) width 5: " " - LayoutButton {BUTTON} at (47.09,1) size 38.28x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] + LayoutButton {BUTTON} at (47.31,1) size 38.28x18 [bgcolor=#C0C0C0] [border: none (2px outset #C0C0C0) none (2px outset #C0C0C0)] LayoutBlockFlow (anonymous) at (8,2) size 22.28x13 LayoutText {#text} at (0,0) size 23x13 text run at (0,0) width 23: "hide"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/spanOverlapRepaint-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/spanOverlapRepaint-expected.png index 1f54639..aff79d4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/spanOverlapRepaint-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/spanOverlapRepaint-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/text-field-baseline-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/table/text-field-baseline-expected.png index 861cd34..98b1b36 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/text-field-baseline-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/text-field-baseline-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/color-emoji-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/color-emoji-expected.png index 6759624..7ec71e5f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/color-emoji-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/color-emoji-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/complex-preferred-logical-widths-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/complex-preferred-logical-widths-expected.png index fa2211a..737eabb9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/complex-preferred-logical-widths-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/complex-preferred-logical-widths-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/drawBidiText-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/drawBidiText-expected.png index 0757e0a..a2a30cc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/drawBidiText-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/drawBidiText-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/drawBidiText-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/text/drawBidiText-expected.txt index 2d96786..17fed9b9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/drawBidiText-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/drawBidiText-expected.txt
@@ -16,8 +16,8 @@ text run at (134,0) width 51 RTL: "\x{5E9}\x{5E0}\x{5D9}\x{5D4} (" text run at (184,0) width 41: " fifth" LayoutBlockFlow {OPTION} at (1,23.59) size 332.22x22.59 - LayoutText {#text} at (108,0) size 223x21 - text run at (108,0) width 35: "fifth" + LayoutText {#text} at (107,0) size 224x21 + text run at (107,0) width 36: "fifth" text run at (142,0) width 73 RTL: ") \x{5E8}\x{5D1}\x{5D9}\x{5E2}\x{5D9}\x{5EA} " text run at (214,0) width 24: "03" text run at (237,0) width 56 RTL: " \x{5E9}\x{5E0}\x{5D9}\x{5D4} (" @@ -32,16 +32,16 @@ LayoutText {#text} at (2,0) size 112x21 text run at (2,0) width 112 RTL: "\x{5DE}\x{5E9}\x{5D4}\x{5D5} \x{5E2}\x{5DD} \x{5E0}\x{5B4}\x{5E7}\x{5BC}\x{5D5}\x{5BC}\x{5D3}" LayoutBlockFlow {OPTION} at (1,113.97) size 332.22x25 - LayoutText {#text} at (2,0) size 77x21 - text run at (2,0) width 77 RTL: "\x{627}\x{644}\x{644}\x{63A}\x{629} \x{627}\x{644}\x{639}\x{631}\x{628}\x{64A}\x{629}" + LayoutText {#text} at (2,0) size 74x21 + text run at (2,0) width 74 RTL: "\x{627}\x{644}\x{644}\x{63A}\x{629} \x{627}\x{644}\x{639}\x{631}\x{628}\x{64A}\x{629}" LayoutBlockFlow {OPTION} at (1,138.97) size 332.22x22.59 - LayoutText {#text} at (2,0) size 130x21 - text run at (2,0) width 130: "Et volia\x{300}: ATSUI!" + LayoutText {#text} at (2,0) size 131x21 + text run at (2,0) width 131: "Et volia\x{300}: ATSUI!" LayoutBlockFlow {OPTION} at (1,161.56) size 332.22x22.59 - LayoutText {#text} at (2,0) size 302x21 + LayoutText {#text} at (2,0) size 303x21 text run at (2,0) width 97: "Directional " text run at (98,0) width 80 RTL override: "\x{202E}overrides" - text run at (177,0) width 127: "\x{202C} are confusing." + text run at (177,0) width 128: "\x{202C} are confusing." LayoutBlockFlow {OPTION} at (1,184.16) size 332.22x22.59 LayoutText {#text} at (2,0) size 329x21 text run at (2,0) width 87: "She said \x{201C}" @@ -49,8 +49,8 @@ text run at (163,0) width 37: "TNT" text run at (199,0) width 25 RTL: "\x{202B}\x{5D9}\x{5E9} " text run at (223,0) width 108: "\x{202C}\x{201D} and ran off" -layer at (8,269) size 377x18 clip at (9,270) size 364x16 - LayoutListBox {SELECT} at (0,261) size 377.11x18 [bgcolor=#FFFFFF] [border: (1px solid #999999)] - LayoutBlockFlow {OPTION} at (1,1) size 364.11x16 - LayoutText {#text} at (2,0) size 361x15 - text run at (2,0) width 361: "There are two ways to measure text: my way and the wrong way" +layer at (8,269) size 380x18 clip at (9,270) size 367x16 + LayoutListBox {SELECT} at (0,261) size 380.09x18 [bgcolor=#FFFFFF] [border: (1px solid #999999)] + LayoutBlockFlow {OPTION} at (1,1) size 367.09x16 + LayoutText {#text} at (2,0) size 364x15 + text run at (2,0) width 364: "There are two ways to measure text: my way and the wrong way"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/emoticons-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/emoticons-expected.png index dba363d..a7c44c3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/emoticons-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/emoticons-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/emphasis-complex-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/emphasis-complex-expected.png index 1a27a0c..1506e9b3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/emphasis-complex-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/emphasis-complex-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/fallback-traits-fixup-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/fallback-traits-fixup-expected.png index 84ea2c2..05f687b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/fallback-traits-fixup-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/fallback-traits-fixup-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/font-fallback-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/font-fallback-expected.png index ccaae1aa..d7b7bcf7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/font-fallback-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/font-fallback-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/font-fallback-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/text/font-fallback-expected.txt index 6ca96f6..a31aec76 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/font-fallback-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/font-fallback-expected.txt
@@ -1,8 +1,8 @@ layer at (0,0) size 800x600 LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x217 - LayoutBlockFlow {HTML} at (0,0) size 800x217 - LayoutBlockFlow {BODY} at (8,8) size 784x201 +layer at (0,0) size 800x213 + LayoutBlockFlow {HTML} at (0,0) size 800x213 + LayoutBlockFlow {BODY} at (8,8) size 784x197 LayoutBlockFlow {DIV} at (0,0) size 784x21 LayoutBlockFlow {SPAN} at (0,1) size 160x18 LayoutText {#text} at (0,0) size 48x18 @@ -53,9 +53,9 @@ text run at (0,0) width 75: "Mongolian:" LayoutText {#text} at (160,3) size 87x18 text run at (160,3) width 87: " \x{182E}\x{1823}\x{1829}\x{182D}\x{1823}\x{182F}\x{182A}\x{1822}\x{1834}\x{1822}\x{182D}" - LayoutBlockFlow {DIV} at (0,179) size 784x22 - LayoutBlockFlow {SPAN} at (0,3) size 160x18 + LayoutBlockFlow {DIV} at (0,179) size 784x18 + LayoutBlockFlow {SPAN} at (0,0) size 160x18 LayoutText {#text} at (0,0) size 69x18 text run at (0,0) width 69: "Glagolitic:" - LayoutText {#text} at (160,3) size 68x18 - text run at (160,3) width 68: " \x{2C09}\x{2C0A}\x{2C1F}\x{2C09}" + LayoutText {#text} at (160,0) size 51x18 + text run at (160,0) width 51: " \x{2C09}\x{2C0A}\x{2C1F}\x{2C09}"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-listbox-atsui-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-listbox-atsui-expected.png index b515f857..adf160c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-listbox-atsui-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-listbox-atsui-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-listbox-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-listbox-expected.png index 8ac648c..fe6a2118 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-listbox-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/bidi-listbox-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/khmer-selection-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/khmer-selection-expected.png index f7767237..5211a25e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/khmer-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/khmer-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/lang-glyph-cache-separation-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/lang-glyph-cache-separation-expected.png index 31e8374..445d19c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/lang-glyph-cache-separation-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/lang-glyph-cache-separation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/mixed-directionality-selection-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/mixed-directionality-selection-expected.png index e25bd78..b7601c1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/mixed-directionality-selection-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/mixed-directionality-selection-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/unicode-bidi-plaintext-in-textarea-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/unicode-bidi-plaintext-in-textarea-expected.png index 1b3db5c..f2f9049 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/unicode-bidi-plaintext-in-textarea-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/international/unicode-bidi-plaintext-in-textarea-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/justify-ideograph-complex-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/justify-ideograph-complex-expected.png index bed6952..938253e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/justify-ideograph-complex-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/justify-ideograph-complex-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/justify-ideograph-simple-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/justify-ideograph-simple-expected.png index bed6952..938253e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/justify-ideograph-simple-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/justify-ideograph-simple-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/justify-ideograph-vertical-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/justify-ideograph-vertical-expected.png index c8507602..41f27f6cb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/justify-ideograph-vertical-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/justify-ideograph-vertical-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/midword-break-before-surrogate-pair-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/midword-break-before-surrogate-pair-expected.png index d7e2c97..03fff3cd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/midword-break-before-surrogate-pair-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/midword-break-before-surrogate-pair-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/textIteratorNilRenderer-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/textIteratorNilRenderer-expected.png index 0285790..e00b033 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/textIteratorNilRenderer-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/textIteratorNilRenderer-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/textIteratorNilRenderer-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/text/textIteratorNilRenderer-expected.txt index 3511d12..630125a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/textIteratorNilRenderer-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/textIteratorNilRenderer-expected.txt
@@ -15,8 +15,8 @@ LayoutTextControl {INPUT} at (0,0) size 251x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutText {#text} at (0,0) size 0x0 LayoutTableCell {TD} at (401,0) size 95x18 [r=0 c=2 rs=1 cs=1] - LayoutButton {INPUT} at (0,0) size 94.27x18 [bgcolor=#C0C0C0] - LayoutBlockFlow (anonymous) at (8,2) size 78.27x13 + LayoutButton {INPUT} at (0,0) size 94.59x18 [bgcolor=#C0C0C0] + LayoutBlockFlow (anonymous) at (8,2) size 78.59x13 LayoutText {#text} at (0,0) size 79x13 text run at (0,0) width 79: "Search Froogle" LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/unicode-fallback-font-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/unicode-fallback-font-expected.png index 62b09ba..84f1b70 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/unicode-fallback-font-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/unicode-fallback-font-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/unicode-fallback-font-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/text/unicode-fallback-font-expected.txt index 05489ab..e0b9eae 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/unicode-fallback-font-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/unicode-fallback-font-expected.txt
@@ -1,144 +1,144 @@ -layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 1246 +layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 1258 LayoutView at (0,0) size 800x600 -layer at (0,0) size 785x1246 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 - LayoutBlockFlow {HTML} at (0,0) size 785x1245.88 - LayoutBlockFlow {BODY} at (8,21.44) size 769x1208.44 +layer at (0,0) size 785x1258 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 + LayoutBlockFlow {HTML} at (0,0) size 785x1257.88 + LayoutBlockFlow {BODY} at (8,21.44) size 769x1220.44 LayoutBlockFlow {H1} at (0,0) size 769x37 LayoutText {#text} at (0,0) size 236x37 text run at (0,0) width 236: "Unicode Symbols" - LayoutBlockFlow {PRE} at (0,58.44) size 769x1098 - LayoutText {#text} at (0,0) size 411x105 + LayoutBlockFlow {PRE} at (0,58.44) size 769x1110 + LayoutText {#text} at (0,0) size 292x116 text run at (0,0) width 0: " " - text run at (0,15) width 411: "U+16Ax \x{16A0} \x{16A1} \x{16A2} \x{16A3} \x{16A4} \x{16A5} \x{16A6} \x{16A7} \x{16A8} \x{16A9} \x{16AA} \x{16AB} \x{16AC} \x{16AD} \x{16AE} \x{16AF}" - text run at (410,15) width 1: " " - text run at (0,30) width 411: "U+16Bx \x{16B0} \x{16B1} \x{16B2} \x{16B3} \x{16B4} \x{16B5} \x{16B6} \x{16B7} \x{16B8} \x{16B9} \x{16BA} \x{16BB} \x{16BC} \x{16BD} \x{16BE} \x{16BF}" - text run at (410,30) width 1: " " - text run at (0,45) width 411: "U+16Cx \x{16C0} \x{16C1} \x{16C2} \x{16C3} \x{16C4} \x{16C5} \x{16C6} \x{16C7} \x{16C8} \x{16C9} \x{16CA} \x{16CB} \x{16CC} \x{16CD} \x{16CE} \x{16CF}" - text run at (410,45) width 1: " " - text run at (0,60) width 411: "U+16Dx \x{16D0} \x{16D1} \x{16D2} \x{16D3} \x{16D4} \x{16D5} \x{16D6} \x{16D7} \x{16D8} \x{16D9} \x{16DA} \x{16DB} \x{16DC} \x{16DD} \x{16DE} \x{16DF}" - text run at (410,60) width 1: " " - text run at (0,75) width 411: "U+16Ex \x{16E0} \x{16E1} \x{16E2} \x{16E3} \x{16E4} \x{16E5} \x{16E6} \x{16E7} \x{16E8} \x{16E9} \x{16EA} \x{16EB} \x{16EC} \x{16ED} \x{16EE} \x{16EF}" - text run at (410,75) width 1: " " - text run at (0,90) width 70: "U+16Fx \x{16F0}" - text run at (69,90) width 1: " " - LayoutText {#text} at (0,105) size 297x120 - text run at (0,105) width 0: " " - text run at (0,120) width 258: "U+200x \x{2000} \x{2001} \x{2002} \x{2003} \x{2004} \x{2004} \x{2004} \x{2004} \x{2004} \x{2009} \x{200A} \x{200B} \x{200C} \x{200D} \x{200E} " - text run at (257,120) width 1 RTL: "\x{200F}" - text run at (257,120) width 1: " " - text run at (0,135) width 297: "U+201x \x{2010} \x{2011} \x{2012} \x{2013} \x{2014} \x{2015} \x{2016} \x{2017} \x{2018} \x{2019} \x{201A} \x{201B} \x{201C} \x{201D} \x{201E} \x{201F}" - text run at (296,135) width 1: " " - text run at (0,150) width 196: "U+202x \x{2020} \x{2021} \x{2022} \x{2023} \x{2024} \x{2025} \x{2026} \x{2027} \x{2028} \x{2029} " - text run at (195,150) width 8: "\x{202A} " - text run at (202,150) width 9 RTL: "\x{202B} " - text run at (210,150) width 9: "\x{202C} " - text run at (218,150) width 9 LTR override: "\x{202D} " - text run at (226,150) width 1 RTL override: " " - text run at (226,150) width 16 RTL override: "\x{202E} \x{202F}" - text run at (0,165) width 297: "U+203x \x{2030} \x{2031} \x{2032} \x{2033} \x{2034} \x{2035} \x{2036} \x{2037} \x{2038} \x{2039} \x{203A} \x{203B} \x{203C} \x{203D} \x{203E} \x{203F}" - text run at (296,165) width 1: " " - text run at (0,180) width 297: "U+204x \x{2040} \x{2041} \x{2042} \x{2043} \x{2044} \x{2045} \x{2046} \x{2047} \x{2048} \x{2049} \x{204A} \x{204B} \x{204C} \x{204D} \x{204E} \x{204F}" - text run at (296,180) width 1: " " - text run at (0,195) width 297: "U+205x \x{2050} \x{2051} \x{2052} \x{2053} \x{2054} \x{2055} \x{2056} \x{2057} \x{2058} \x{2059} \x{205A} \x{205B} \x{205C} \x{205D} \x{205E} \x{205F}" - text run at (296,195) width 1: " " - text run at (0,210) width 133: "U+206x \x{2060} \x{2061} \x{2062} \x{2063} \x{2064} \x{206A} \x{206B} \x{206C} \x{206D} \x{206E} \x{206F}" - text run at (132,210) width 1: " " - LayoutText {#text} at (0,225) size 380x350 - text run at (0,225) width 0: " " - text run at (0,244) width 355: "U+260x \x{2600} \x{2601} \x{2602} \x{2603} \x{2604} \x{2605} \x{2606} \x{2607} \x{2608} \x{2609} \x{260A} \x{260B} \x{260C} \x{260D} \x{260E} \x{260F}" - text run at (354,244) width 1: " " - text run at (0,266) width 364: "U+261x \x{2610} \x{2611} \x{2612} \x{2613} \x{2614} \x{2615} \x{2616} \x{2617} \x{2618} \x{2619} \x{261A} \x{261B} \x{261C} \x{261D} \x{261E} \x{261F}" - text run at (363,266) width 1: " " - text run at (0,288) width 339: "U+262x \x{2620} \x{2621} \x{2622} \x{2623} \x{2624} \x{2625} \x{2626} \x{2627} \x{2628} \x{2629} \x{262A} \x{262B} \x{262C} \x{262D} \x{262E} \x{262F}" - text run at (338,288) width 1: " " - text run at (0,310) width 344: "U+263x \x{2630} \x{2631} \x{2632} \x{2633} \x{2634} \x{2635} \x{2636} \x{2637} \x{2638} \x{2639} \x{263A} \x{263B} \x{263C} \x{263D} \x{263E} \x{263F}" - text run at (343,310) width 1: " " - text run at (0,331) width 342: "U+264x \x{2640} \x{2641} \x{2642} \x{2643} \x{2644} \x{2645} \x{2646} \x{2647} \x{2648} \x{2649} \x{264A} \x{264B} \x{264C} \x{264D} \x{264E} \x{264F}" - text run at (341,331) width 1: " " - text run at (0,352) width 380: "U+265x \x{2650} \x{2651} \x{2652} \x{2653} \x{2654} \x{2655} \x{2656} \x{2657} \x{2658} \x{2659} \x{265A} \x{265B} \x{265C} \x{265D} \x{265E} \x{265F}" - text run at (379,352) width 1: " " - text run at (0,371) width 344: "U+266x \x{2660} \x{2661} \x{2662} \x{2663} \x{2664} \x{2665} \x{2666} \x{2667} \x{2668} \x{2669} \x{266A} \x{266B} \x{266C} \x{266D} \x{266E} \x{266F}" - text run at (343,371) width 1: " " - text run at (0,393) width 365: "U+267x \x{2670} \x{2671} \x{2672} \x{2673} \x{2674} \x{2675} \x{2676} \x{2677} \x{2678} \x{2679} \x{267A} \x{267B} \x{267C} \x{267D} \x{267E} \x{267F}" - text run at (364,393) width 1: " " - text run at (0,411) width 311: "U+268x \x{2680} \x{2681} \x{2682} \x{2683} \x{2684} \x{2685} \x{2686} \x{2687} \x{2688} \x{2689} \x{268A} \x{268B} \x{268C} \x{268D} \x{268E} \x{268F}" - text run at (311,411) width 0: " " - text run at (0,431) width 343: "U+269x \x{2690} \x{2691} \x{2692} \x{2693} \x{2694} \x{2695} \x{2696} \x{2697} \x{2698} \x{2699} \x{269A} \x{269B} \x{269C} \x{269D} \x{269E} \x{269F}" - text run at (342,431) width 1: " " - text run at (0,452) width 354: "U+26Ax \x{26A0} \x{26A1} \x{26A2} \x{26A3} \x{26A4} \x{26A5} \x{26A6} \x{26A7} \x{26A8} \x{26A9} \x{26AA} \x{26AB} \x{26AC} \x{26AD} \x{26AE} \x{26AF}" - text run at (353,452) width 1: " " - text run at (0,474) width 335: "U+26Bx \x{26B0} \x{26B1} \x{26B2} \x{26B3} \x{26B4} \x{26B5} \x{26B6} \x{26B7} \x{26B8} \x{26B9} \x{26BA} \x{26BB} \x{26BC} \x{26BD} \x{26BE} \x{26BF}" - text run at (334,474) width 1: " " - text run at (0,496) width 340: "U+26Cx \x{26C0} \x{26C1} \x{26C2} \x{26C3} \x{26C4} \x{26C5} \x{26C6} \x{26C7} \x{26C8} \x{26C9} \x{26CA} \x{26CB} \x{26CC} \x{26CD} \x{26CE} \x{26CF}" - text run at (339,496) width 1: " " - text run at (0,517) width 333: "U+26Dx \x{26D0} \x{26D1} \x{26D2} \x{26D3} \x{26D4} \x{26D5} \x{26D6} \x{26D7} \x{26D8} \x{26D9} \x{26DA} \x{26DB} \x{26DC} \x{26DD} \x{26DE} \x{26DF}" - text run at (332,517) width 1: " " - text run at (0,538) width 329: "U+26Ex \x{26E0} \x{26E1} \x{26E2} \x{26E3} \x{26E4} \x{26E5} \x{26E6} \x{26E7} \x{26E8} \x{26E9} \x{26EA} \x{26EB} \x{26EC} \x{26ED} \x{26EE} \x{26EF}" - text run at (328,538) width 1: " " - text run at (0,560) width 362: "U+26Fx \x{26F0} \x{26F1} \x{26F2} \x{26F3} \x{26F4} \x{26F5} \x{26F6} \x{26F7} \x{26F8} \x{26F9} \x{26FA} \x{26FB} \x{26FC} \x{26FD} \x{26FE} \x{26FF}" - text run at (361,560) width 1: " " - LayoutText {#text} at (0,577) size 361x229 - text run at (0,577) width 0: " " - text run at (0,596) width 361: "U+270x \x{2700} \x{2701} \x{2702} \x{2703} \x{2704} \x{2705} \x{2706} \x{2707} \x{2708} \x{2709} \x{270A} \x{270B} \x{270C} \x{270D} \x{270E} \x{270F}" - text run at (360,596) width 1: " " - text run at (0,613) width 326: "U+271x \x{2710} \x{2711} \x{2712} \x{2713} \x{2714} \x{2715} \x{2716} \x{2717} \x{2718} \x{2719} \x{271A} \x{271B} \x{271C} \x{271D} \x{271E} \x{271F}" - text run at (325,613) width 1: " " - text run at (0,632) width 338: "U+272x \x{2720} \x{2721} \x{2722} \x{2723} \x{2724} \x{2725} \x{2726} \x{2727} \x{2728} \x{2729} \x{272A} \x{272B} \x{272C} \x{272D} \x{272E} \x{272F}" - text run at (337,632) width 1: " " - text run at (0,649) width 330: "U+273x \x{2730} \x{2731} \x{2732} \x{2733} \x{2734} \x{2735} \x{2736} \x{2737} \x{2738} \x{2739} \x{273A} \x{273B} \x{273C} \x{273D} \x{273E} \x{273F}" - text run at (329,649) width 1: " " - text run at (0,668) width 337: "U+274x \x{2740} \x{2741} \x{2742} \x{2743} \x{2744} \x{2745} \x{2746} \x{2747} \x{2748} \x{2749} \x{274A} \x{274B} \x{274C} \x{274D} \x{274E} \x{274F}" - text run at (336,668) width 1: " " - text run at (0,689) width 312: "U+275x \x{2750} \x{2751} \x{2752} \x{2753} \x{2754} \x{2755} \x{2756} \x{2757} \x{2758} \x{2759} \x{275A} \x{275B} \x{275C} \x{275D} \x{275E} \x{275F}" - text run at (311,689) width 1: " " - text run at (0,706) width 284: "U+276x \x{2760} \x{2761} \x{2762} \x{2763} \x{2764} \x{2765} \x{2766} \x{2767} \x{2768} \x{2769} \x{276A} \x{276B} \x{276C} \x{276D} \x{276E} \x{276F}" - text run at (283,706) width 1: " " - text run at (0,721) width 300: "U+277x \x{2770} \x{2771} \x{2772} \x{2773} \x{2774} \x{2775} \x{2776} \x{2777} \x{2778} \x{2779} \x{277A} \x{277B} \x{277C} \x{277D} \x{277E} \x{277F}" - text run at (299,721) width 1: " " - text run at (0,736) width 336: "U+278x \x{2780} \x{2781} \x{2782} \x{2783} \x{2784} \x{2785} \x{2786} \x{2787} \x{2788} \x{2789} \x{278A} \x{278B} \x{278C} \x{278D} \x{278E} \x{278F}" - text run at (335,736) width 1: " " - text run at (0,755) width 354: "U+279x \x{2790} \x{2791} \x{2792} \x{2793} \x{2794} \x{2795} \x{2796} \x{2797} \x{2798} \x{2799} \x{279A} \x{279B} \x{279C} \x{279D} \x{279E} \x{279F}" - text run at (353,755) width 1: " " - text run at (0,772) width 346: "U+27Ax \x{27A0} \x{27A1} \x{27A2} \x{27A3} \x{27A4} \x{27A5} \x{27A6} \x{27A7} \x{27A8} \x{27A9} \x{27AA} \x{27AB} \x{27AC} \x{27AD} \x{27AE} \x{27AF}" - text run at (345,772) width 1: " " - text run at (0,791) width 357: "U+27Bx \x{27B0} \x{27B1} \x{27B2} \x{27B3} \x{27B4} \x{27B5} \x{27B6} \x{27B7} \x{27B8} \x{27B9} \x{27BA} \x{27BB} \x{27BC} \x{27BD} \x{27BE} \x{27BF}" - text run at (356,791) width 1: " " - LayoutText {#text} at (0,808) size 328x290 - text run at (0,808) width 0: " " - text run at (0,823) width 328: "U+2A0x \x{2A00} \x{2A01} \x{2A02} \x{2A03} \x{2A04} \x{2A05} \x{2A06} \x{2A07} \x{2A08} \x{2A09} \x{2A0A} \x{2A0B} \x{2A0C} \x{2A0D} \x{2A0E} \x{2A0F}" - text run at (327,823) width 1: " " - text run at (0,841) width 291: "U+2A1x \x{2A10} \x{2A11} \x{2A12} \x{2A13} \x{2A14} \x{2A15} \x{2A16} \x{2A17} \x{2A18} \x{2A19} \x{2A1A} \x{2A1B} \x{2A1C} \x{2A1D} \x{2A1E} \x{2A1F}" - text run at (290,841) width 1: " " - text run at (0,859) width 293: "U+2A2x \x{2A20} \x{2A21} \x{2A22} \x{2A23} \x{2A24} \x{2A25} \x{2A26} \x{2A27} \x{2A28} \x{2A29} \x{2A2A} \x{2A2B} \x{2A2C} \x{2A2D} \x{2A2E} \x{2A2F}" - text run at (292,859) width 1: " " - text run at (0,875) width 312: "U+2A3x \x{2A30} \x{2A31} \x{2A32} \x{2A33} \x{2A34} \x{2A35} \x{2A36} \x{2A37} \x{2A38} \x{2A39} \x{2A3A} \x{2A3B} \x{2A3C} \x{2A3D} \x{2A3E} \x{2A3F}" - text run at (311,875) width 1: " " - text run at (0,891) width 287: "U+2A4x \x{2A40} \x{2A41} \x{2A42} \x{2A43} \x{2A44} \x{2A45} \x{2A46} \x{2A47} \x{2A48} \x{2A49} \x{2A4A} \x{2A4B} \x{2A4C} \x{2A4D} \x{2A4E} \x{2A4F}" - text run at (286,891) width 1: " " - text run at (0,907) width 311: "U+2A5x \x{2A50} \x{2A51} \x{2A52} \x{2A53} \x{2A54} \x{2A55} \x{2A56} \x{2A57} \x{2A58} \x{2A59} \x{2A5A} \x{2A5B} \x{2A5C} \x{2A5D} \x{2A5E} \x{2A5F}" - text run at (310,907) width 1: " " - text run at (0,923) width 290: "U+2A6x \x{2A60} \x{2A61} \x{2A62} \x{2A63} \x{2A64} \x{2A65} \x{2A66} \x{2A67} \x{2A68} \x{2A69} \x{2A6A} \x{2A6B} \x{2A6C} \x{2A6D} \x{2A6E} \x{2A6F}" - text run at (289,923) width 1: " " - text run at (0,939) width 310: "U+2A7x \x{2A70} \x{2A71} \x{2A72} \x{2A73} \x{2A74} \x{2A75} \x{2A76} \x{2A77} \x{2A78} \x{2A79} \x{2A7A} \x{2A7B} \x{2A7C} \x{2A7D} \x{2A7E} \x{2A7F}" - text run at (309,939) width 1: " " - text run at (0,955) width 286: "U+2A8x \x{2A80} \x{2A81} \x{2A82} \x{2A83} \x{2A84} \x{2A85} \x{2A86} \x{2A87} \x{2A88} \x{2A89} \x{2A8A} \x{2A8B} \x{2A8C} \x{2A8D} \x{2A8E} \x{2A8F}" - text run at (285,955) width 1: " " - text run at (0,971) width 285: "U+2A9x \x{2A90} \x{2A91} \x{2A92} \x{2A93} \x{2A94} \x{2A95} \x{2A96} \x{2A97} \x{2A98} \x{2A99} \x{2A9A} \x{2A9B} \x{2A9C} \x{2A9D} \x{2A9E} \x{2A9F}" - text run at (284,971) width 1: " " - text run at (0,987) width 301: "U+2AAx \x{2AA0} \x{2AA1} \x{2AA2} \x{2AA3} \x{2AA4} \x{2AA5} \x{2AA6} \x{2AA7} \x{2AA8} \x{2AA9} \x{2AAA} \x{2AAB} \x{2AAC} \x{2AAD} \x{2AAE} \x{2AAF}" - text run at (300,987) width 1: " " - text run at (0,1003) width 295: "U+2ABx \x{2AB0} \x{2AB1} \x{2AB2} \x{2AB3} \x{2AB4} \x{2AB5} \x{2AB6} \x{2AB7} \x{2AB8} \x{2AB9} \x{2ABA} \x{2ABB} \x{2ABC} \x{2ABD} \x{2ABE} \x{2ABF}" - text run at (294,1003) width 1: " " - text run at (0,1019) width 286: "U+2ACx \x{2AC0} \x{2AC1} \x{2AC2} \x{2AC3} \x{2AC4} \x{2AC5} \x{2AC6} \x{2AC7} \x{2AC8} \x{2AC9} \x{2ACA} \x{2ACB} \x{2ACC} \x{2ACD} \x{2ACE} \x{2ACF}" - text run at (285,1019) width 1: " " - text run at (0,1035) width 293: "U+2ADx \x{2AD0} \x{2AD1} \x{2AD2} \x{2AD3} \x{2AD4} \x{2AD5} \x{2AD6} \x{2AD7} \x{2AD8} \x{2AD9} \x{2ADA} \x{2ADB} \x{2ADC} \x{2ADD} \x{2ADE} \x{2ADF}" - text run at (292,1035) width 1: " " - text run at (0,1051) width 303: "U+2AEx \x{2AE0} \x{2AE1} \x{2AE2} \x{2AE3} \x{2AE4} \x{2AE5} \x{2AE6} \x{2AE7} \x{2AE8} \x{2AE9} \x{2AEA} \x{2AEB} \x{2AEC} \x{2AED} \x{2AEE} \x{2AEF}" - text run at (302,1051) width 1: " " - text run at (0,1067) width 269: "U+2AFx \x{2AF0} \x{2AF1} \x{2AF2} \x{2AF3} \x{2AF4} \x{2AF5} \x{2AF6} \x{2AF7} \x{2AF8} \x{2AF9} \x{2AFA} \x{2AFB} \x{2AFC} \x{2AFD} \x{2AFE} \x{2AFF}" - text run at (268,1067) width 1: " " - text run at (0,1083) width 63: " " - LayoutBlockFlow {P} at (0,1172.44) size 769x36 + text run at (0,16) width 278: "U+16Ax \x{16A0} \x{16A1} \x{16A2} \x{16A3} \x{16A4} \x{16A5} \x{16A6} \x{16A7} \x{16A8} \x{16A9} \x{16AA} \x{16AB} \x{16AC} \x{16AD} \x{16AE} \x{16AF}" + text run at (277,16) width 1: " " + text run at (0,33) width 282: "U+16Bx \x{16B0} \x{16B1} \x{16B2} \x{16B3} \x{16B4} \x{16B5} \x{16B6} \x{16B7} \x{16B8} \x{16B9} \x{16BA} \x{16BB} \x{16BC} \x{16BD} \x{16BE} \x{16BF}" + text run at (281,33) width 1: " " + text run at (0,50) width 279: "U+16Cx \x{16C0} \x{16C1} \x{16C2} \x{16C3} \x{16C4} \x{16C5} \x{16C6} \x{16C7} \x{16C8} \x{16C9} \x{16CA} \x{16CB} \x{16CC} \x{16CD} \x{16CE} \x{16CF}" + text run at (278,50) width 1: " " + text run at (0,67) width 273: "U+16Dx \x{16D0} \x{16D1} \x{16D2} \x{16D3} \x{16D4} \x{16D5} \x{16D6} \x{16D7} \x{16D8} \x{16D9} \x{16DA} \x{16DB} \x{16DC} \x{16DD} \x{16DE} \x{16DF}" + text run at (272,67) width 1: " " + text run at (0,84) width 292: "U+16Ex \x{16E0} \x{16E1} \x{16E2} \x{16E3} \x{16E4} \x{16E5} \x{16E6} \x{16E7} \x{16E8} \x{16E9} \x{16EA} \x{16EB} \x{16EC} \x{16ED} \x{16EE} \x{16EF}" + text run at (291,84) width 1: " " + text run at (0,101) width 61: "U+16Fx \x{16F0}" + text run at (60,101) width 1: " " + LayoutText {#text} at (0,117) size 297x120 + text run at (0,117) width 0: " " + text run at (0,132) width 258: "U+200x \x{2000} \x{2001} \x{2002} \x{2003} \x{2004} \x{2004} \x{2004} \x{2004} \x{2004} \x{2009} \x{200A} \x{200B} \x{200C} \x{200D} \x{200E} " + text run at (257,132) width 1 RTL: "\x{200F}" + text run at (257,132) width 1: " " + text run at (0,147) width 297: "U+201x \x{2010} \x{2011} \x{2012} \x{2013} \x{2014} \x{2015} \x{2016} \x{2017} \x{2018} \x{2019} \x{201A} \x{201B} \x{201C} \x{201D} \x{201E} \x{201F}" + text run at (296,147) width 1: " " + text run at (0,162) width 196: "U+202x \x{2020} \x{2021} \x{2022} \x{2023} \x{2024} \x{2025} \x{2026} \x{2027} \x{2028} \x{2029} " + text run at (195,162) width 8: "\x{202A} " + text run at (202,162) width 9 RTL: "\x{202B} " + text run at (210,162) width 9: "\x{202C} " + text run at (218,162) width 9 LTR override: "\x{202D} " + text run at (226,162) width 1 RTL override: " " + text run at (226,162) width 16 RTL override: "\x{202E} \x{202F}" + text run at (0,177) width 297: "U+203x \x{2030} \x{2031} \x{2032} \x{2033} \x{2034} \x{2035} \x{2036} \x{2037} \x{2038} \x{2039} \x{203A} \x{203B} \x{203C} \x{203D} \x{203E} \x{203F}" + text run at (296,177) width 1: " " + text run at (0,192) width 297: "U+204x \x{2040} \x{2041} \x{2042} \x{2043} \x{2044} \x{2045} \x{2046} \x{2047} \x{2048} \x{2049} \x{204A} \x{204B} \x{204C} \x{204D} \x{204E} \x{204F}" + text run at (296,192) width 1: " " + text run at (0,207) width 297: "U+205x \x{2050} \x{2051} \x{2052} \x{2053} \x{2054} \x{2055} \x{2056} \x{2057} \x{2058} \x{2059} \x{205A} \x{205B} \x{205C} \x{205D} \x{205E} \x{205F}" + text run at (296,207) width 1: " " + text run at (0,222) width 133: "U+206x \x{2060} \x{2061} \x{2062} \x{2063} \x{2064} \x{206A} \x{206B} \x{206C} \x{206D} \x{206E} \x{206F}" + text run at (132,222) width 1: " " + LayoutText {#text} at (0,237) size 380x350 + text run at (0,237) width 0: " " + text run at (0,256) width 355: "U+260x \x{2600} \x{2601} \x{2602} \x{2603} \x{2604} \x{2605} \x{2606} \x{2607} \x{2608} \x{2609} \x{260A} \x{260B} \x{260C} \x{260D} \x{260E} \x{260F}" + text run at (354,256) width 1: " " + text run at (0,278) width 364: "U+261x \x{2610} \x{2611} \x{2612} \x{2613} \x{2614} \x{2615} \x{2616} \x{2617} \x{2618} \x{2619} \x{261A} \x{261B} \x{261C} \x{261D} \x{261E} \x{261F}" + text run at (363,278) width 1: " " + text run at (0,300) width 339: "U+262x \x{2620} \x{2621} \x{2622} \x{2623} \x{2624} \x{2625} \x{2626} \x{2627} \x{2628} \x{2629} \x{262A} \x{262B} \x{262C} \x{262D} \x{262E} \x{262F}" + text run at (338,300) width 1: " " + text run at (0,322) width 346: "U+263x \x{2630} \x{2631} \x{2632} \x{2633} \x{2634} \x{2635} \x{2636} \x{2637} \x{2638} \x{2639} \x{263A} \x{263B} \x{263C} \x{263D} \x{263E} \x{263F}" + text run at (345,322) width 1: " " + text run at (0,343) width 342: "U+264x \x{2640} \x{2641} \x{2642} \x{2643} \x{2644} \x{2645} \x{2646} \x{2647} \x{2648} \x{2649} \x{264A} \x{264B} \x{264C} \x{264D} \x{264E} \x{264F}" + text run at (341,343) width 1: " " + text run at (0,364) width 380: "U+265x \x{2650} \x{2651} \x{2652} \x{2653} \x{2654} \x{2655} \x{2656} \x{2657} \x{2658} \x{2659} \x{265A} \x{265B} \x{265C} \x{265D} \x{265E} \x{265F}" + text run at (379,364) width 1: " " + text run at (0,383) width 344: "U+266x \x{2660} \x{2661} \x{2662} \x{2663} \x{2664} \x{2665} \x{2666} \x{2667} \x{2668} \x{2669} \x{266A} \x{266B} \x{266C} \x{266D} \x{266E} \x{266F}" + text run at (343,383) width 1: " " + text run at (0,405) width 365: "U+267x \x{2670} \x{2671} \x{2672} \x{2673} \x{2674} \x{2675} \x{2676} \x{2677} \x{2678} \x{2679} \x{267A} \x{267B} \x{267C} \x{267D} \x{267E} \x{267F}" + text run at (364,405) width 1: " " + text run at (0,423) width 311: "U+268x \x{2680} \x{2681} \x{2682} \x{2683} \x{2684} \x{2685} \x{2686} \x{2687} \x{2688} \x{2689} \x{268A} \x{268B} \x{268C} \x{268D} \x{268E} \x{268F}" + text run at (311,423) width 0: " " + text run at (0,443) width 349: "U+269x \x{2690} \x{2691} \x{2692} \x{2693} \x{2694} \x{2695} \x{2696} \x{2697} \x{2698} \x{2699} \x{269A} \x{269B} \x{269C} \x{269D} \x{269E} \x{269F}" + text run at (348,443) width 1: " " + text run at (0,464) width 354: "U+26Ax \x{26A0} \x{26A1} \x{26A2} \x{26A3} \x{26A4} \x{26A5} \x{26A6} \x{26A7} \x{26A8} \x{26A9} \x{26AA} \x{26AB} \x{26AC} \x{26AD} \x{26AE} \x{26AF}" + text run at (353,464) width 1: " " + text run at (0,486) width 335: "U+26Bx \x{26B0} \x{26B1} \x{26B2} \x{26B3} \x{26B4} \x{26B5} \x{26B6} \x{26B7} \x{26B8} \x{26B9} \x{26BA} \x{26BB} \x{26BC} \x{26BD} \x{26BE} \x{26BF}" + text run at (334,486) width 1: " " + text run at (0,508) width 340: "U+26Cx \x{26C0} \x{26C1} \x{26C2} \x{26C3} \x{26C4} \x{26C5} \x{26C6} \x{26C7} \x{26C8} \x{26C9} \x{26CA} \x{26CB} \x{26CC} \x{26CD} \x{26CE} \x{26CF}" + text run at (339,508) width 1: " " + text run at (0,529) width 333: "U+26Dx \x{26D0} \x{26D1} \x{26D2} \x{26D3} \x{26D4} \x{26D5} \x{26D6} \x{26D7} \x{26D8} \x{26D9} \x{26DA} \x{26DB} \x{26DC} \x{26DD} \x{26DE} \x{26DF}" + text run at (332,529) width 1: " " + text run at (0,550) width 329: "U+26Ex \x{26E0} \x{26E1} \x{26E2} \x{26E3} \x{26E4} \x{26E5} \x{26E6} \x{26E7} \x{26E8} \x{26E9} \x{26EA} \x{26EB} \x{26EC} \x{26ED} \x{26EE} \x{26EF}" + text run at (328,550) width 1: " " + text run at (0,572) width 362: "U+26Fx \x{26F0} \x{26F1} \x{26F2} \x{26F3} \x{26F4} \x{26F5} \x{26F6} \x{26F7} \x{26F8} \x{26F9} \x{26FA} \x{26FB} \x{26FC} \x{26FD} \x{26FE} \x{26FF}" + text run at (361,572) width 1: " " + LayoutText {#text} at (0,589) size 361x229 + text run at (0,589) width 0: " " + text run at (0,608) width 361: "U+270x \x{2700} \x{2701} \x{2702} \x{2703} \x{2704} \x{2705} \x{2706} \x{2707} \x{2708} \x{2709} \x{270A} \x{270B} \x{270C} \x{270D} \x{270E} \x{270F}" + text run at (360,608) width 1: " " + text run at (0,625) width 326: "U+271x \x{2710} \x{2711} \x{2712} \x{2713} \x{2714} \x{2715} \x{2716} \x{2717} \x{2718} \x{2719} \x{271A} \x{271B} \x{271C} \x{271D} \x{271E} \x{271F}" + text run at (325,625) width 1: " " + text run at (0,644) width 338: "U+272x \x{2720} \x{2721} \x{2722} \x{2723} \x{2724} \x{2725} \x{2726} \x{2727} \x{2728} \x{2729} \x{272A} \x{272B} \x{272C} \x{272D} \x{272E} \x{272F}" + text run at (337,644) width 1: " " + text run at (0,661) width 330: "U+273x \x{2730} \x{2731} \x{2732} \x{2733} \x{2734} \x{2735} \x{2736} \x{2737} \x{2738} \x{2739} \x{273A} \x{273B} \x{273C} \x{273D} \x{273E} \x{273F}" + text run at (329,661) width 1: " " + text run at (0,680) width 337: "U+274x \x{2740} \x{2741} \x{2742} \x{2743} \x{2744} \x{2745} \x{2746} \x{2747} \x{2748} \x{2749} \x{274A} \x{274B} \x{274C} \x{274D} \x{274E} \x{274F}" + text run at (336,680) width 1: " " + text run at (0,701) width 312: "U+275x \x{2750} \x{2751} \x{2752} \x{2753} \x{2754} \x{2755} \x{2756} \x{2757} \x{2758} \x{2759} \x{275A} \x{275B} \x{275C} \x{275D} \x{275E} \x{275F}" + text run at (311,701) width 1: " " + text run at (0,718) width 284: "U+276x \x{2760} \x{2761} \x{2762} \x{2763} \x{2764} \x{2765} \x{2766} \x{2767} \x{2768} \x{2769} \x{276A} \x{276B} \x{276C} \x{276D} \x{276E} \x{276F}" + text run at (283,718) width 1: " " + text run at (0,733) width 300: "U+277x \x{2770} \x{2771} \x{2772} \x{2773} \x{2774} \x{2775} \x{2776} \x{2777} \x{2778} \x{2779} \x{277A} \x{277B} \x{277C} \x{277D} \x{277E} \x{277F}" + text run at (299,733) width 1: " " + text run at (0,748) width 336: "U+278x \x{2780} \x{2781} \x{2782} \x{2783} \x{2784} \x{2785} \x{2786} \x{2787} \x{2788} \x{2789} \x{278A} \x{278B} \x{278C} \x{278D} \x{278E} \x{278F}" + text run at (335,748) width 1: " " + text run at (0,767) width 354: "U+279x \x{2790} \x{2791} \x{2792} \x{2793} \x{2794} \x{2795} \x{2796} \x{2797} \x{2798} \x{2799} \x{279A} \x{279B} \x{279C} \x{279D} \x{279E} \x{279F}" + text run at (353,767) width 1: " " + text run at (0,784) width 346: "U+27Ax \x{27A0} \x{27A1} \x{27A2} \x{27A3} \x{27A4} \x{27A5} \x{27A6} \x{27A7} \x{27A8} \x{27A9} \x{27AA} \x{27AB} \x{27AC} \x{27AD} \x{27AE} \x{27AF}" + text run at (345,784) width 1: " " + text run at (0,803) width 357: "U+27Bx \x{27B0} \x{27B1} \x{27B2} \x{27B3} \x{27B4} \x{27B5} \x{27B6} \x{27B7} \x{27B8} \x{27B9} \x{27BA} \x{27BB} \x{27BC} \x{27BD} \x{27BE} \x{27BF}" + text run at (356,803) width 1: " " + LayoutText {#text} at (0,820) size 328x290 + text run at (0,820) width 0: " " + text run at (0,835) width 328: "U+2A0x \x{2A00} \x{2A01} \x{2A02} \x{2A03} \x{2A04} \x{2A05} \x{2A06} \x{2A07} \x{2A08} \x{2A09} \x{2A0A} \x{2A0B} \x{2A0C} \x{2A0D} \x{2A0E} \x{2A0F}" + text run at (327,835) width 1: " " + text run at (0,853) width 291: "U+2A1x \x{2A10} \x{2A11} \x{2A12} \x{2A13} \x{2A14} \x{2A15} \x{2A16} \x{2A17} \x{2A18} \x{2A19} \x{2A1A} \x{2A1B} \x{2A1C} \x{2A1D} \x{2A1E} \x{2A1F}" + text run at (290,853) width 1: " " + text run at (0,871) width 293: "U+2A2x \x{2A20} \x{2A21} \x{2A22} \x{2A23} \x{2A24} \x{2A25} \x{2A26} \x{2A27} \x{2A28} \x{2A29} \x{2A2A} \x{2A2B} \x{2A2C} \x{2A2D} \x{2A2E} \x{2A2F}" + text run at (292,871) width 1: " " + text run at (0,887) width 312: "U+2A3x \x{2A30} \x{2A31} \x{2A32} \x{2A33} \x{2A34} \x{2A35} \x{2A36} \x{2A37} \x{2A38} \x{2A39} \x{2A3A} \x{2A3B} \x{2A3C} \x{2A3D} \x{2A3E} \x{2A3F}" + text run at (311,887) width 1: " " + text run at (0,903) width 287: "U+2A4x \x{2A40} \x{2A41} \x{2A42} \x{2A43} \x{2A44} \x{2A45} \x{2A46} \x{2A47} \x{2A48} \x{2A49} \x{2A4A} \x{2A4B} \x{2A4C} \x{2A4D} \x{2A4E} \x{2A4F}" + text run at (286,903) width 1: " " + text run at (0,919) width 311: "U+2A5x \x{2A50} \x{2A51} \x{2A52} \x{2A53} \x{2A54} \x{2A55} \x{2A56} \x{2A57} \x{2A58} \x{2A59} \x{2A5A} \x{2A5B} \x{2A5C} \x{2A5D} \x{2A5E} \x{2A5F}" + text run at (310,919) width 1: " " + text run at (0,935) width 290: "U+2A6x \x{2A60} \x{2A61} \x{2A62} \x{2A63} \x{2A64} \x{2A65} \x{2A66} \x{2A67} \x{2A68} \x{2A69} \x{2A6A} \x{2A6B} \x{2A6C} \x{2A6D} \x{2A6E} \x{2A6F}" + text run at (289,935) width 1: " " + text run at (0,951) width 310: "U+2A7x \x{2A70} \x{2A71} \x{2A72} \x{2A73} \x{2A74} \x{2A75} \x{2A76} \x{2A77} \x{2A78} \x{2A79} \x{2A7A} \x{2A7B} \x{2A7C} \x{2A7D} \x{2A7E} \x{2A7F}" + text run at (309,951) width 1: " " + text run at (0,967) width 286: "U+2A8x \x{2A80} \x{2A81} \x{2A82} \x{2A83} \x{2A84} \x{2A85} \x{2A86} \x{2A87} \x{2A88} \x{2A89} \x{2A8A} \x{2A8B} \x{2A8C} \x{2A8D} \x{2A8E} \x{2A8F}" + text run at (285,967) width 1: " " + text run at (0,983) width 285: "U+2A9x \x{2A90} \x{2A91} \x{2A92} \x{2A93} \x{2A94} \x{2A95} \x{2A96} \x{2A97} \x{2A98} \x{2A99} \x{2A9A} \x{2A9B} \x{2A9C} \x{2A9D} \x{2A9E} \x{2A9F}" + text run at (284,983) width 1: " " + text run at (0,999) width 301: "U+2AAx \x{2AA0} \x{2AA1} \x{2AA2} \x{2AA3} \x{2AA4} \x{2AA5} \x{2AA6} \x{2AA7} \x{2AA8} \x{2AA9} \x{2AAA} \x{2AAB} \x{2AAC} \x{2AAD} \x{2AAE} \x{2AAF}" + text run at (300,999) width 1: " " + text run at (0,1015) width 295: "U+2ABx \x{2AB0} \x{2AB1} \x{2AB2} \x{2AB3} \x{2AB4} \x{2AB5} \x{2AB6} \x{2AB7} \x{2AB8} \x{2AB9} \x{2ABA} \x{2ABB} \x{2ABC} \x{2ABD} \x{2ABE} \x{2ABF}" + text run at (294,1015) width 1: " " + text run at (0,1031) width 286: "U+2ACx \x{2AC0} \x{2AC1} \x{2AC2} \x{2AC3} \x{2AC4} \x{2AC5} \x{2AC6} \x{2AC7} \x{2AC8} \x{2AC9} \x{2ACA} \x{2ACB} \x{2ACC} \x{2ACD} \x{2ACE} \x{2ACF}" + text run at (285,1031) width 1: " " + text run at (0,1047) width 293: "U+2ADx \x{2AD0} \x{2AD1} \x{2AD2} \x{2AD3} \x{2AD4} \x{2AD5} \x{2AD6} \x{2AD7} \x{2AD8} \x{2AD9} \x{2ADA} \x{2ADB} \x{2ADC} \x{2ADD} \x{2ADE} \x{2ADF}" + text run at (292,1047) width 1: " " + text run at (0,1063) width 303: "U+2AEx \x{2AE0} \x{2AE1} \x{2AE2} \x{2AE3} \x{2AE4} \x{2AE5} \x{2AE6} \x{2AE7} \x{2AE8} \x{2AE9} \x{2AEA} \x{2AEB} \x{2AEC} \x{2AED} \x{2AEE} \x{2AEF}" + text run at (302,1063) width 1: " " + text run at (0,1079) width 269: "U+2AFx \x{2AF0} \x{2AF1} \x{2AF2} \x{2AF3} \x{2AF4} \x{2AF5} \x{2AF6} \x{2AF7} \x{2AF8} \x{2AF9} \x{2AFA} \x{2AFB} \x{2AFC} \x{2AFD} \x{2AFE} \x{2AFF}" + text run at (268,1079) width 1: " " + text run at (0,1095) width 63: " " + LayoutBlockFlow {P} at (0,1184.44) size 769x36 LayoutText {#text} at (0,0) size 764x36 text run at (0,0) width 764: "A series of unicode symbols (Runic, General Punctuation, Miscellaneous Symbols, and Mathematical Symbols) should" text run at (0,18) width 108: "be shown above."
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/updateNewFont-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/text/updateNewFont-expected.png index 953391e9..0495caa 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/updateNewFont-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/updateNewFont-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/text/updateNewFont-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/text/updateNewFont-expected.txt index 2b16c6a..032b067 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/text/updateNewFont-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/text/updateNewFont-expected.txt
@@ -5,7 +5,7 @@ LayoutBlockFlow {BODY} at (8,8) size 784x112 LayoutText {#text} at (0,0) size 0x0 layer at (8,8) size 34x112 clip at (9,9) size 21x110 - LayoutListBox {SELECT} at (0,0.31) size 33.89x111.69 [bgcolor=#FFFFFF] [border: (1px solid #999999)] - LayoutBlockFlow {OPTION} at (1,1) size 20.89x12.19 + LayoutListBox {SELECT} at (0,0.31) size 34x111.69 [bgcolor=#FFFFFF] [border: (1px solid #999999)] + LayoutBlockFlow {OPTION} at (1,1) size 21x12.19 LayoutText {#text} at (2,0) size 17x11 text run at (2,0) width 17: "test"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/text-combine-various-fonts-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/text-combine-various-fonts-expected.png index 129f53f..f8767f6a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/text-combine-various-fonts-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/text-combine-various-fonts-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/text-combine-various-fonts-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/text-combine-various-fonts-expected.txt index 3fc93374..1046978f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/text-combine-various-fonts-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/writing-mode/text-combine-various-fonts-expected.txt
@@ -74,51 +74,51 @@ LayoutText {#text} at (0,128) size 18x16 text run at (0,128) width 16: "\x{56FD}" LayoutBlockFlow {DIV} at (57,0) size 19x584 - LayoutText {#text} at (1,0) size 16x16 - text run at (1,0) width 16: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 16x16 - LayoutTextCombine {#text} at (1,16) size 16x16 - text run at (1,16) width 16: "1" - LayoutText {#text} at (1,32) size 16x16 - text run at (1,32) width 16: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 16x16 - LayoutTextCombine {#text} at (1,48) size 16x16 - text run at (1,48) width 16: "23" - LayoutText {#text} at (1,64) size 16x16 - text run at (1,64) width 16: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 16x16 - LayoutTextCombine {#text} at (1,80) size 16x16 - text run at (1,80) width 16: "2016" - LayoutText {#text} at (1,96) size 16x16 - text run at (1,96) width 16: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 16x16 - LayoutTextCombine {#text} at (1,112) size 16x16 - text run at (1,112) width 16: "45674567" - LayoutText {#text} at (1,128) size 16x16 - text run at (1,128) width 16: "\x{56FD}" + LayoutText {#text} at (0,0) size 18x16 + text run at (0,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,16) size 18x16 + text run at (0,16) width 16: "1" + LayoutText {#text} at (0,32) size 18x16 + text run at (0,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,48) size 18x16 + text run at (0,48) width 16: "23" + LayoutText {#text} at (0,64) size 18x16 + text run at (0,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,80) size 18x16 + text run at (0,80) width 16: "2016" + LayoutText {#text} at (0,96) size 18x16 + text run at (0,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,112) size 18x16 + text run at (0,112) width 16: "45674567" + LayoutText {#text} at (0,128) size 18x16 + text run at (0,128) width 16: "\x{56FD}" LayoutBlockFlow {DIV} at (76,0) size 19x584 - LayoutText {#text} at (1,0) size 16x16 - text run at (1,0) width 16: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 16x16 - LayoutTextCombine {#text} at (1,16) size 16x16 - text run at (1,16) width 16: "1" - LayoutText {#text} at (1,32) size 16x16 - text run at (1,32) width 16: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 16x16 - LayoutTextCombine {#text} at (1,48) size 16x16 - text run at (1,48) width 16: "23" - LayoutText {#text} at (1,64) size 16x16 - text run at (1,64) width 16: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 16x16 - LayoutTextCombine {#text} at (1,80) size 16x16 - text run at (1,80) width 16: "2016" - LayoutText {#text} at (1,96) size 16x16 - text run at (1,96) width 16: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 16x16 - LayoutTextCombine {#text} at (1,112) size 16x16 - text run at (1,112) width 16: "45674567" - LayoutText {#text} at (1,128) size 16x16 - text run at (1,128) width 16: "\x{56FD}" + LayoutText {#text} at (0,0) size 18x16 + text run at (0,0) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,16) size 18x16 + text run at (0,16) width 16: "1" + LayoutText {#text} at (0,32) size 18x16 + text run at (0,32) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,48) size 18x16 + text run at (0,48) width 16: "23" + LayoutText {#text} at (0,64) size 18x16 + text run at (0,64) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,80) size 18x16 + text run at (0,80) width 16: "2016" + LayoutText {#text} at (0,96) size 18x16 + text run at (0,96) width 16: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 18x16 + LayoutTextCombine {#text} at (0,112) size 18x16 + text run at (0,112) width 16: "45674567" + LayoutText {#text} at (0,128) size 18x16 + text run at (0,128) width 16: "\x{56FD}" LayoutBlockFlow {DIV} at (95,0) size 19x584 LayoutText {#text} at (1,0) size 16x16 text run at (1,0) width 16: "\x{56FD}" @@ -259,51 +259,51 @@ LayoutText {#text} at (0,256) size 37x32 text run at (0,256) width 32: "\x{56FD}" LayoutBlockFlow {DIV} at (114,0) size 38x584 - LayoutText {#text} at (3,0) size 32x32 - text run at (3,0) width 32: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 32x32 - LayoutTextCombine {#text} at (3,32) size 32x32 - text run at (3,32) width 32: "1" - LayoutText {#text} at (3,64) size 32x32 - text run at (3,64) width 32: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 32x32 - LayoutTextCombine {#text} at (3,96) size 32x32 - text run at (3,96) width 32: "23" - LayoutText {#text} at (3,128) size 32x32 - text run at (3,128) width 32: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 32x32 - LayoutTextCombine {#text} at (3,160) size 32x32 - text run at (3,160) width 32: "2016" - LayoutText {#text} at (3,192) size 32x32 - text run at (3,192) width 32: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 32x32 - LayoutTextCombine {#text} at (3,224) size 32x32 - text run at (3,224) width 32: "45674567" - LayoutText {#text} at (3,256) size 32x32 - text run at (3,256) width 32: "\x{56FD}" + LayoutText {#text} at (0,0) size 37x32 + text run at (0,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,32) size 37x32 + text run at (0,32) width 32: "1" + LayoutText {#text} at (0,64) size 37x32 + text run at (0,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,96) size 37x32 + text run at (0,96) width 32: "23" + LayoutText {#text} at (0,128) size 37x32 + text run at (0,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,160) size 37x32 + text run at (0,160) width 32: "2016" + LayoutText {#text} at (0,192) size 37x32 + text run at (0,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,224) size 37x32 + text run at (0,224) width 32: "45674567" + LayoutText {#text} at (0,256) size 37x32 + text run at (0,256) width 32: "\x{56FD}" LayoutBlockFlow {DIV} at (152,0) size 38x584 - LayoutText {#text} at (3,0) size 32x32 - text run at (3,0) width 32: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 32x32 - LayoutTextCombine {#text} at (3,32) size 32x32 - text run at (3,32) width 32: "1" - LayoutText {#text} at (3,64) size 32x32 - text run at (3,64) width 32: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 32x32 - LayoutTextCombine {#text} at (3,96) size 32x32 - text run at (3,96) width 32: "23" - LayoutText {#text} at (3,128) size 32x32 - text run at (3,128) width 32: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 32x32 - LayoutTextCombine {#text} at (3,160) size 32x32 - text run at (3,160) width 32: "2016" - LayoutText {#text} at (3,192) size 32x32 - text run at (3,192) width 32: "\x{56FD}" - LayoutInline {SPAN} at (0,0) size 32x32 - LayoutTextCombine {#text} at (3,224) size 32x32 - text run at (3,224) width 32: "45674567" - LayoutText {#text} at (3,256) size 32x32 - text run at (3,256) width 32: "\x{56FD}" + LayoutText {#text} at (0,0) size 37x32 + text run at (0,0) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,32) size 37x32 + text run at (0,32) width 32: "1" + LayoutText {#text} at (0,64) size 37x32 + text run at (0,64) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,96) size 37x32 + text run at (0,96) width 32: "23" + LayoutText {#text} at (0,128) size 37x32 + text run at (0,128) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,160) size 37x32 + text run at (0,160) width 32: "2016" + LayoutText {#text} at (0,192) size 37x32 + text run at (0,192) width 32: "\x{56FD}" + LayoutInline {SPAN} at (0,0) size 37x32 + LayoutTextCombine {#text} at (0,224) size 37x32 + text run at (0,224) width 32: "45674567" + LayoutText {#text} at (0,256) size 37x32 + text run at (0,256) width 32: "\x{56FD}" LayoutBlockFlow {DIV} at (190,0) size 38x584 LayoutText {#text} at (3,0) size 32x32 text run at (3,0) width 32: "\x{56FD}"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/stable/webexposed/global-interface-listing-expected.txt index 38229c4a..b6774759 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/stable/webexposed/global-interface-listing-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -3442,6 +3442,7 @@ method clone method constructor method getConstraints + method getSettings method stop setter enabled setter onended
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed01-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed01-expected.png deleted file mode 100644 index d0e1c1dd..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed01-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed02-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed02-expected.png deleted file mode 100644 index 197931b..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed02-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed03-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed03-expected.png deleted file mode 100644 index 93ad8819..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed03-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed04-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed04-expected.png deleted file mode 100644 index 6801ab8..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed04-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed05-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed05-expected.png deleted file mode 100644 index eb136ed4..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed05-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed06-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed06-expected.png deleted file mode 100644 index a33965f..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDashed06-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDotted01-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDotted01-expected.png deleted file mode 100644 index 803dd075..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDotted01-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDotted04-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDotted04-expected.png deleted file mode 100644 index ed9ed195..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/fast/borders/borderRadiusDotted04-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/replaced/border-radius-clip-content-edge-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/replaced/border-radius-clip-content-edge-expected.png deleted file mode 100644 index a1c0a0c..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/fast/replaced/border-radius-clip-content-edge-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/text/font-ligature-letter-spacing-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/text/font-ligature-letter-spacing-expected.txt deleted file mode 100644 index 399ab86..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/fast/text/font-ligature-letter-spacing-expected.txt +++ /dev/null
@@ -1,7 +0,0 @@ -This is a testharness.js-based test. -Harness Error. harness_status.status = 1 , harness_status.message = 1 duplicate test name: "Ligature expected not to be applied due to letter spacing." -FAIL Ligature expected not to be applied due to letter spacing. assert_equals: Ligature not applied due to letter spacing. expected 282.96875 but got 138.359375 -FAIL Ligature expected not to be applied due to letter spacing. assert_equals: Ligature not applied due to letter spacing. expected 282.96875 but got 138.359375 -PASS Non-ligature font feature expected to be applied despite letter spacing. -Harness: the test ran to completion. -
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/stable/webexposed/global-interface-listing-expected.txt index 4bbc5f0e..c76e0ec 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/stable/webexposed/global-interface-listing-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -3371,6 +3371,7 @@ method clone method constructor method getConstraints + method getSettings method stop setter enabled setter onended
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt index 00c8d2e..5718059 100644 --- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt +++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
@@ -4118,6 +4118,7 @@ getter readyState method clone method constructor + method getCapabilities method getConstraints method getSettings method stop
diff --git a/third_party/WebKit/Source/bindings/core/v8/GeneratedCodeHelper.cpp b/third_party/WebKit/Source/bindings/core/v8/GeneratedCodeHelper.cpp index deed6892..babf6ce 100644 --- a/third_party/WebKit/Source/bindings/core/v8/GeneratedCodeHelper.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/GeneratedCodeHelper.cpp
@@ -25,7 +25,7 @@ v8::Local<v8::Value> v8Deserialize(v8::Isolate* isolate, PassRefPtr<SerializedScriptValue> value) { if (value) - return value->deserialize(); + return value->deserialize(isolate); return v8::Null(isolate); }
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptValue.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptValue.cpp index b32ea7c..e6f98e0 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptValue.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptValue.cpp
@@ -65,7 +65,7 @@ v8::Local<v8::Value> value = m_value->newLocal(isolate); RefPtr<SerializedScriptValue> serialized = SerializedScriptValue::serializeAndSwallowExceptions(isolate, value); - return serialized->deserialize(); + return serialized->deserialize(isolate); } bool ScriptValue::toString(String& result) const {
diff --git a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp index a79e51d..ee223db 100644 --- a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp
@@ -267,11 +267,6 @@ } v8::Local<v8::Value> SerializedScriptValue::deserialize( - MessagePortArray* messagePorts) { - return deserialize(v8::Isolate::GetCurrent(), messagePorts, 0); -} - -v8::Local<v8::Value> SerializedScriptValue::deserialize( v8::Isolate* isolate, MessagePortArray* messagePorts, const WebBlobInfoArray* blobInfo) {
diff --git a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h index 9c4e3a9..ea223805 100644 --- a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h +++ b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h
@@ -99,7 +99,6 @@ // Deserializes the value (in the current context). Returns a null value in // case of failure. - v8::Local<v8::Value> deserialize(MessagePortArray* = 0); v8::Local<v8::Value> deserialize(v8::Isolate*, MessagePortArray* = 0, const WebBlobInfoArray* = 0);
diff --git a/third_party/WebKit/Source/bindings/core/v8/custom/V8CustomEventCustom.cpp b/third_party/WebKit/Source/bindings/core/v8/custom/V8CustomEventCustom.cpp index 17470c1..285eb9f 100644 --- a/third_party/WebKit/Source/bindings/core/v8/custom/V8CustomEventCustom.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/custom/V8CustomEventCustom.cpp
@@ -117,11 +117,11 @@ void V8CustomEvent::detailAttributeGetterCustom( const v8::FunctionCallbackInfo<v8::Value>& info) { + v8::Isolate* isolate = info.GetIsolate(); CustomEvent* event = V8CustomEvent::toImpl(info.Holder()); - ScriptState* scriptState = ScriptState::current(info.GetIsolate()); + ScriptState* scriptState = ScriptState::current(isolate); - auto privateDetail = - V8PrivateProperty::getCustomEventDetail(info.GetIsolate()); + auto privateDetail = V8PrivateProperty::getCustomEventDetail(isolate); v8::Local<v8::Value> detail = privateDetail.get(scriptState->context(), info.Holder()); if (!detail.IsEmpty()) { @@ -131,22 +131,22 @@ // Be careful not to return a V8 value which is created in different world. if (SerializedScriptValue* serializedValue = event->serializedDetail()) { - detail = serializedValue->deserialize(); + detail = serializedValue->deserialize(isolate); } else if (scriptState->world().isIsolatedWorld()) { v8::Local<v8::Value> mainWorldDetail = privateDetail.getFromMainWorld(scriptState, event); if (!mainWorldDetail.IsEmpty()) { event->setSerializedDetail( SerializedScriptValue::serializeAndSwallowExceptions( - info.GetIsolate(), mainWorldDetail)); - detail = event->serializedDetail()->deserialize(); + isolate, mainWorldDetail)); + detail = event->serializedDetail()->deserialize(isolate); } } // |detail| should be null when it is an empty handle because its default // value is null. if (detail.IsEmpty()) - detail = v8::Null(info.GetIsolate()); + detail = v8::Null(isolate); privateDetail.set(scriptState->context(), info.Holder(), detail); v8SetReturnValue(info, detail); }
diff --git a/third_party/WebKit/Source/bindings/core/v8/custom/V8PopStateEventCustom.cpp b/third_party/WebKit/Source/bindings/core/v8/custom/V8PopStateEventCustom.cpp index 53f1f41e..141a842 100644 --- a/third_party/WebKit/Source/bindings/core/v8/custom/V8PopStateEventCustom.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/custom/V8PopStateEventCustom.cpp
@@ -52,9 +52,10 @@ void V8PopStateEvent::stateAttributeGetterCustom( const v8::FunctionCallbackInfo<v8::Value>& info) { - ScriptState* scriptState = ScriptState::current(info.GetIsolate()); + v8::Isolate* isolate = info.GetIsolate(); + ScriptState* scriptState = ScriptState::current(isolate); v8::Local<v8::Value> result = V8HiddenValue::getHiddenValue( - scriptState, info.Holder(), V8HiddenValue::state(info.GetIsolate())); + scriptState, info.Holder(), V8HiddenValue::state(isolate)); if (!result.IsEmpty()) { v8SetReturnValue(info, result); @@ -68,11 +69,11 @@ // event was initialized with PopStateEventInit. In such case, we need // to get a v8 value for the current world from state(). if (event->serializedState()) - result = event->serializedState()->deserialize(); + result = event->serializedState()->deserialize(isolate); else result = event->state().v8ValueFor(scriptState); if (result.IsEmpty()) - result = v8::Null(info.GetIsolate()); + result = v8::Null(isolate); v8SetReturnValue(info, cacheState(scriptState, info.Holder(), result)); return; } @@ -88,25 +89,23 @@ bool isSameState = history->isSameAsCurrentState(event->serializedState()); if (isSameState) { - v8::Local<v8::Value> v8HistoryValue = - ToV8(history, info.Holder(), info.GetIsolate()); + v8::Local<v8::Value> v8HistoryValue = ToV8(history, info.Holder(), isolate); if (v8HistoryValue.IsEmpty()) return; v8::Local<v8::Object> v8History = v8HistoryValue.As<v8::Object>(); if (!history->stateChanged()) { - result = V8HiddenValue::getHiddenValue( - scriptState, v8History, V8HiddenValue::state(info.GetIsolate())); + result = V8HiddenValue::getHiddenValue(scriptState, v8History, + V8HiddenValue::state(isolate)); if (!result.IsEmpty()) { v8SetReturnValue(info, cacheState(scriptState, info.Holder(), result)); return; } } - result = event->serializedState()->deserialize(info.GetIsolate()); + result = event->serializedState()->deserialize(isolate); V8HiddenValue::setHiddenValue(scriptState, v8History, - V8HiddenValue::state(info.GetIsolate()), - result); + V8HiddenValue::state(isolate), result); } else { - result = event->serializedState()->deserialize(info.GetIsolate()); + result = event->serializedState()->deserialize(isolate); } v8SetReturnValue(info, cacheState(scriptState, info.Holder(), result));
diff --git a/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp b/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp index 9151029..283c590 100644 --- a/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp
@@ -354,6 +354,14 @@ v8SetReturnValueFast(info, child->domWindow(), window); return; } + + // In addition to the above spec'ed case, we return the child window + // regardless of step 3 due to crbug.com/701489 for the time being. + // TODO(yukishiino): Makes iframe.name update the browsing context name + // appropriately and makes the new name available in the named access on + // window. Then, removes the following two lines. + v8SetReturnValueFast(info, child->domWindow(), window); + return; } // This is a cross-origin interceptor. Check that the caller has access to the
diff --git a/third_party/WebKit/Source/bindings/modules/v8/V8ServiceWorkerMessageEventInternal.h b/third_party/WebKit/Source/bindings/modules/v8/V8ServiceWorkerMessageEventInternal.h index 3615723..25c8ec7 100644 --- a/third_party/WebKit/Source/bindings/modules/v8/V8ServiceWorkerMessageEventInternal.h +++ b/third_party/WebKit/Source/bindings/modules/v8/V8ServiceWorkerMessageEventInternal.h
@@ -97,7 +97,7 @@ event->setSerializedData( SerializedScriptValue::serializeAndSwallowExceptions( info.GetIsolate(), mainWorldData)); - data = event->serializedData()->deserialize(); + data = event->serializedData()->deserialize(isolate); } } if (data.IsEmpty())
diff --git a/third_party/WebKit/Source/core/css/resolver/SharedStyleFinder.cpp b/third_party/WebKit/Source/core/css/resolver/SharedStyleFinder.cpp index 8ecb8159..b5d88e7 100644 --- a/third_party/WebKit/Source/core/css/resolver/SharedStyleFinder.cpp +++ b/third_party/WebKit/Source/core/css/resolver/SharedStyleFinder.cpp
@@ -356,7 +356,7 @@ if (it != styleSharingList.begin()) { // Move the element to the front of the LRU styleSharingList.erase(it); - styleSharingList.prepend(&candidate); + styleSharingList.push_front(&candidate); } return &candidate; }
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp index 55ae9c2..4353a4a 100644 --- a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp +++ b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
@@ -201,7 +201,7 @@ StyleSharingList& list = styleSharingList(); if (list.size() >= styleSharingListSize) list.pop_back(); - list.prepend(&element); + list.push_front(&element); } StyleSharingList& StyleResolver::styleSharingList() {
diff --git a/third_party/WebKit/Source/core/dom/FirstLetterPseudoElement.cpp b/third_party/WebKit/Source/core/dom/FirstLetterPseudoElement.cpp index e6be908..b08b73b 100644 --- a/third_party/WebKit/Source/core/dom/FirstLetterPseudoElement.cpp +++ b/third_party/WebKit/Source/core/dom/FirstLetterPseudoElement.cpp
@@ -290,13 +290,20 @@ // FIXME: This would already have been calculated in firstLetterLayoutObject. // Can we pass the length through? unsigned length = FirstLetterPseudoElement::firstLetterLength(oldText); + unsigned remainingLength = oldText.length() - length; // Construct a text fragment for the text after the first letter. // This text fragment might be empty. - LayoutTextFragment* remainingText = new LayoutTextFragment( - nextLayoutObject->node() ? nextLayoutObject->node() - : &nextLayoutObject->document(), - oldText.impl(), length, oldText.length() - length); + LayoutTextFragment* remainingText; + + if (nextLayoutObject->node()) { + remainingText = new LayoutTextFragment( + nextLayoutObject->node(), oldText.impl(), length, remainingLength); + } else { + remainingText = LayoutTextFragment::createAnonymous( + *this, oldText.impl(), length, remainingLength); + } + remainingText->setFirstLetterPseudoElement(this); remainingText->setIsRemainingTextLayoutObject(true); remainingText->setStyle(nextLayoutObject->mutableStyle()); @@ -310,8 +317,8 @@ layoutObject()->parent()->addChild(remainingText, nextSibling); // Construct text fragment for the first letter. - LayoutTextFragment* letter = new LayoutTextFragment( - &nextLayoutObject->document(), oldText.impl(), 0, length); + LayoutTextFragment* letter = + LayoutTextFragment::createAnonymous(*this, oldText.impl(), 0, length); letter->setFirstLetterPseudoElement(this); letter->setStyle(pseudoStyle); layoutObject()->addChild(letter);
diff --git a/third_party/WebKit/Source/core/dom/Fullscreen.cpp b/third_party/WebKit/Source/core/dom/Fullscreen.cpp index 2347549..ffe32600 100644 --- a/third_party/WebKit/Source/core/dom/Fullscreen.cpp +++ b/third_party/WebKit/Source/core/dom/Fullscreen.cpp
@@ -433,7 +433,7 @@ // the IPC that dispatches fullscreenchange. HeapDeque<Member<Document>> docs; for (Document* doc = &document; doc; doc = nextLocalAncestor(*doc)) - docs.prepend(doc); + docs.push_front(doc); // 4. For each document in docs, run these substeps: HeapDeque<Member<Document>>::iterator current = docs.begin(), @@ -546,7 +546,7 @@ continue; DCHECK(toLocalFrame(descendant)->document()); if (fullscreenElementFrom(*toLocalFrame(descendant)->document())) - descendants.prepend(toLocalFrame(descendant)->document()); + descendants.push_front(toLocalFrame(descendant)->document()); } // 4. For each descendant in descendants, empty descendant's fullscreen
diff --git a/third_party/WebKit/Source/core/dom/PseudoElement.cpp b/third_party/WebKit/Source/core/dom/PseudoElement.cpp index ae36c01..b3692d8 100644 --- a/third_party/WebKit/Source/core/dom/PseudoElement.cpp +++ b/third_party/WebKit/Source/core/dom/PseudoElement.cpp
@@ -132,7 +132,7 @@ for (const ContentData* content = style.contentData(); content; content = content->next()) { - LayoutObject* child = content->createLayoutObject(document(), style); + LayoutObject* child = content->createLayoutObject(*this, style); if (layoutObject->isChildAllowed(child, style)) { layoutObject->addChild(child); if (child->isQuote())
diff --git a/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp b/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp index 8e5d0af..7ee8803 100644 --- a/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp +++ b/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp
@@ -21,6 +21,7 @@ : Platform::current()->currentThread()->getWebTaskRunner(); case TaskType::UnspecedLoading: case TaskType::Networking: + case TaskType::DatabaseAccess: return frame ? frame->frameScheduler()->loadingTaskRunner() : Platform::current()->currentThread()->getWebTaskRunner(); // Throttling following tasks may break existing web pages, so tentatively @@ -40,7 +41,6 @@ case TaskType::PostedMessage: case TaskType::UnshippedPortMessage: case TaskType::FileReading: - case TaskType::DatabaseAccess: case TaskType::Presentation: case TaskType::Sensor: case TaskType::PerformanceTimeline:
diff --git a/third_party/WebKit/Source/core/editing/CaretDisplayItemClient.cpp b/third_party/WebKit/Source/core/editing/CaretDisplayItemClient.cpp index 5ad7545a..cb1f6b2 100644 --- a/third_party/WebKit/Source/core/editing/CaretDisplayItemClient.cpp +++ b/third_party/WebKit/Source/core/editing/CaretDisplayItemClient.cpp
@@ -208,10 +208,7 @@ LayoutRect newVisualRect; if (!m_localRect.isEmpty()) { newVisualRect = m_localRect; - context.mapLocalRectToPaintInvalidationBacking(*m_layoutBlock, - newVisualRect); - newVisualRect.move(m_layoutBlock->scrollAdjustmentForPaintInvalidation( - *context.paintInvalidationContainer)); + context.mapLocalRectToVisualRectInBacking(*m_layoutBlock, newVisualRect); if (m_layoutBlock->usesCompositedScrolling()) { // The caret should use scrolling coordinate space.
diff --git a/third_party/WebKit/Source/core/layout/HitTestResult.cpp b/third_party/WebKit/Source/core/layout/HitTestResult.cpp index 0e4ce89..54e7376 100644 --- a/third_party/WebKit/Source/core/layout/HitTestResult.cpp +++ b/third_party/WebKit/Source/core/layout/HitTestResult.cpp
@@ -170,12 +170,21 @@ } void HitTestResult::setToShadowHostIfInUserAgentShadowRoot() { - if (Node* node = innerNode()) { - if (ShadowRoot* containingShadowRoot = node->containingShadowRoot()) { - if (containingShadowRoot->type() == ShadowRootType::UserAgent) - setInnerNode(node->ownerShadowHost()); - } + Node* node = innerNode(); + if (!node) + return; + + ShadowRoot* containingShadowRoot = node->containingShadowRoot(); + Element* shadowHost = nullptr; + + while (containingShadowRoot && + containingShadowRoot->type() == ShadowRootType::UserAgent) { + shadowHost = &containingShadowRoot->host(); + containingShadowRoot = shadowHost->containingShadowRoot(); } + + if (shadowHost) + setInnerNode(shadowHost); } HTMLAreaElement* HitTestResult::imageAreaForImage() const {
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp index 9a0a90f99..06f862d 100644 --- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
@@ -3473,8 +3473,6 @@ LayoutUnit floatLogicalLeft; - bool insideFlowThread = flowThreadContainingBlock(); - if (childBox->style()->floating() == EFloat::kLeft) { LayoutUnit heightRemainingLeft = LayoutUnit(1); LayoutUnit heightRemainingRight = LayoutUnit(1); @@ -3488,15 +3486,6 @@ std::min<LayoutUnit>(heightRemainingLeft, heightRemainingRight); floatLogicalLeft = logicalLeftOffsetForPositioningFloat( logicalTopOffset, logicalLeftOffset, &heightRemainingLeft); - if (insideFlowThread) { - // Have to re-evaluate all of our offsets, since they may have changed. - logicalRightOffset = - logicalRightOffsetForContent(); // Constant part of right offset. - logicalLeftOffset = - logicalLeftOffsetForContent(); // Constant part of left offset. - floatLogicalWidth = std::min(logicalWidthForFloat(floatingObject), - logicalRightOffset - logicalLeftOffset); - } } floatLogicalLeft = std::max( logicalLeftOffset - borderAndPaddingLogicalLeft(), floatLogicalLeft); @@ -3512,15 +3501,6 @@ logicalTopOffset += std::min(heightRemainingLeft, heightRemainingRight); floatLogicalLeft = logicalRightOffsetForPositioningFloat( logicalTopOffset, logicalRightOffset, &heightRemainingRight); - if (insideFlowThread) { - // Have to re-evaluate all of our offsets, since they may have changed. - logicalRightOffset = - logicalRightOffsetForContent(); // Constant part of right offset. - logicalLeftOffset = - logicalLeftOffsetForContent(); // Constant part of left offset. - floatLogicalWidth = std::min(logicalWidthForFloat(floatingObject), - logicalRightOffset - logicalLeftOffset); - } } // Use the original width of the float here, since the local variable // |floatLogicalWidth| was capped to the available line width. See
diff --git a/third_party/WebKit/Source/core/layout/LayoutCounter.cpp b/third_party/WebKit/Source/core/layout/LayoutCounter.cpp index 55ee982..a37e1ca 100644 --- a/third_party/WebKit/Source/core/layout/LayoutCounter.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutCounter.cpp
@@ -21,9 +21,11 @@ #include "core/layout/LayoutCounter.h" +#include <memory> #include "core/HTMLNames.h" #include "core/dom/Element.h" #include "core/dom/ElementTraversal.h" +#include "core/dom/PseudoElement.h" #include "core/html/HTMLOListElement.h" #include "core/layout/CounterNode.h" #include "core/layout/LayoutListItem.h" @@ -32,7 +34,6 @@ #include "core/style/ComputedStyle.h" #include "wtf/PtrUtil.h" #include "wtf/StdLibExtras.h" -#include <memory> #ifndef NDEBUG #include <stdio.h> @@ -424,11 +425,13 @@ return newNode.get(); } -LayoutCounter::LayoutCounter(Document* node, const CounterContent& counter) - : LayoutText(node, StringImpl::empty), +LayoutCounter::LayoutCounter(PseudoElement& pseudo, + const CounterContent& counter) + : LayoutText(nullptr, StringImpl::empty), m_counter(counter), m_counterNode(nullptr), m_nextForSameCounter(nullptr) { + setDocumentForAnonymous(&pseudo.document()); view()->addLayoutCounter(); }
diff --git a/third_party/WebKit/Source/core/layout/LayoutCounter.h b/third_party/WebKit/Source/core/layout/LayoutCounter.h index 6863f4b..0844eae6 100644 --- a/third_party/WebKit/Source/core/layout/LayoutCounter.h +++ b/third_party/WebKit/Source/core/layout/LayoutCounter.h
@@ -28,6 +28,7 @@ namespace blink { class CounterNode; +class PseudoElement; // LayoutCounter is used to represent the text of a counter. // See http://www.w3.org/TR/CSS21/generate.html#counters @@ -49,7 +50,7 @@ // LayoutCounter during their lifetime (see the static functions below). class LayoutCounter final : public LayoutText { public: - LayoutCounter(Document*, const CounterContent&); + LayoutCounter(PseudoElement&, const CounterContent&); ~LayoutCounter() override; // These functions are static so that any LayoutObject can call them.
diff --git a/third_party/WebKit/Source/core/layout/LayoutImage.cpp b/third_party/WebKit/Source/core/layout/LayoutImage.cpp index 4863e53..9b95e882 100644 --- a/third_party/WebKit/Source/core/layout/LayoutImage.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutImage.cpp
@@ -29,6 +29,7 @@ #include "core/layout/LayoutImage.h" #include "core/HTMLNames.h" +#include "core/dom/PseudoElement.h" #include "core/frame/FrameView.h" #include "core/frame/LocalFrame.h" #include "core/frame/UseCounter.h" @@ -50,9 +51,9 @@ m_isGeneratedContent(false), m_imageDevicePixelRatio(1.0f) {} -LayoutImage* LayoutImage::createAnonymous(Document* document) { +LayoutImage* LayoutImage::createAnonymous(PseudoElement& pseudo) { LayoutImage* image = new LayoutImage(nullptr); - image->setDocumentForAnonymous(document); + image->setDocumentForAnonymous(&pseudo.document()); return image; }
diff --git a/third_party/WebKit/Source/core/layout/LayoutImage.h b/third_party/WebKit/Source/core/layout/LayoutImage.h index bc63b2f6..bbb09b9 100644 --- a/third_party/WebKit/Source/core/layout/LayoutImage.h +++ b/third_party/WebKit/Source/core/layout/LayoutImage.h
@@ -54,7 +54,7 @@ LayoutImage(Element*); ~LayoutImage() override; - static LayoutImage* createAnonymous(Document*); + static LayoutImage* createAnonymous(PseudoElement&); void setImageResource(LayoutImageResource*);
diff --git a/third_party/WebKit/Source/core/layout/LayoutMenuList.cpp b/third_party/WebKit/Source/core/layout/LayoutMenuList.cpp index d62d3e4..a9353af 100644 --- a/third_party/WebKit/Source/core/layout/LayoutMenuList.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutMenuList.cpp
@@ -70,7 +70,7 @@ ASSERT(!firstChild()); m_innerBlock = createAnonymousBlock(); - m_buttonText = new LayoutText(&document(), StringImpl::empty); + m_buttonText = LayoutText::createEmptyAnonymous(document()); // We need to set the text explicitly though it was specified in the // constructor because LayoutText doesn't refer to the text // specified in the constructor in a case of re-transforming.
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp index e561c4b..fc01370 100644 --- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
@@ -1114,9 +1114,9 @@ IntSize LayoutObject::scrollAdjustmentForPaintInvalidation( const LayoutBoxModelObject& paintInvalidationContainer) const { - // Non-composited scrolling should be included in the bounds of scrolleditems. - // Since mapToVisualRectInAncestorSpace does not include scrolling of the - // ancestor, we need to add it back in after. + // Non-composited scrolling should be included in the bounds of scrolled + // items. Since mapToVisualRectInAncestorSpace does not include scrolling of + // the ancestor, we need to add it back in after. if (paintInvalidationContainer.isBox() && !paintInvalidationContainer.usesCompositedScrolling() && this != &paintInvalidationContainer) { @@ -1205,13 +1205,6 @@ context.newLocation = paintInvalidationState.computeLocationInBacking(newVisualRect.location()); - IntSize adjustment = - scrollAdjustmentForPaintInvalidation(paintInvalidationContainer); - context.newLocation.move(adjustment); - newVisualRect.move(adjustment); - - adjustVisualRectForRasterEffects(newVisualRect); - setVisualRect(newVisualRect); paintInvalidator.setLocationInBacking(context.newLocation);
diff --git a/third_party/WebKit/Source/core/layout/LayoutQuote.cpp b/third_party/WebKit/Source/core/layout/LayoutQuote.cpp index 9322b7d..a939e240 100644 --- a/third_party/WebKit/Source/core/layout/LayoutQuote.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutQuote.cpp
@@ -21,6 +21,7 @@ #include "core/layout/LayoutQuote.h" +#include "core/dom/PseudoElement.h" #include "core/layout/LayoutTextFragment.h" #include "core/layout/LayoutView.h" #include "wtf/StdLibExtras.h" @@ -30,14 +31,15 @@ namespace blink { -LayoutQuote::LayoutQuote(Document* node, QuoteType quote) +LayoutQuote::LayoutQuote(PseudoElement& pseudo, QuoteType quote) : LayoutInline(nullptr), m_type(quote), m_depth(0), m_next(nullptr), m_previous(nullptr), + m_owningPseudo(&pseudo), m_attached(false) { - setDocumentForAnonymous(node); + setDocumentForAnonymous(&pseudo.document()); } LayoutQuote::~LayoutQuote() { @@ -264,7 +266,8 @@ fragment->setStyle(mutableStyle()); fragment->setContentString(m_text.impl()); } else { - fragment = new LayoutTextFragment(&document(), m_text.impl()); + fragment = + LayoutTextFragment::createAnonymous(*m_owningPseudo, m_text.impl()); fragment->setStyle(mutableStyle()); addChild(fragment); }
diff --git a/third_party/WebKit/Source/core/layout/LayoutQuote.h b/third_party/WebKit/Source/core/layout/LayoutQuote.h index 3b460372..96c633b 100644 --- a/third_party/WebKit/Source/core/layout/LayoutQuote.h +++ b/third_party/WebKit/Source/core/layout/LayoutQuote.h
@@ -27,8 +27,8 @@ namespace blink { -class Document; class LayoutTextFragment; +class PseudoElement; // LayoutQuote is the layout object associated with generated quotes // ("content: open-quote | close-quote | no-open-quote | no-close-quote"). @@ -40,7 +40,7 @@ // and |m_previous| below. class LayoutQuote final : public LayoutInline { public: - LayoutQuote(Document*, const QuoteType); + LayoutQuote(PseudoElement&, const QuoteType); ~LayoutQuote() override; void attachQuote(); @@ -81,6 +81,11 @@ LayoutQuote* m_next; LayoutQuote* m_previous; + // The pseudo-element that owns us. + // + // Lifetime is the same as LayoutObject::m_node, so this is safe. + UntracedMember<PseudoElement> m_owningPseudo; + // This tracks whether this LayoutQuote was inserted into the layout tree // and its position in the linked list is correct (m_next and m_previous). // It's used for both performance (avoid unneeded tree walks to find the
diff --git a/third_party/WebKit/Source/core/layout/LayoutText.cpp b/third_party/WebKit/Source/core/layout/LayoutText.cpp index 14174575..be826bc 100644 --- a/third_party/WebKit/Source/core/layout/LayoutText.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutText.cpp
@@ -150,7 +150,7 @@ } LayoutText::LayoutText(Node* node, PassRefPtr<StringImpl> str) - : LayoutObject(!node || node->isDocumentNode() ? 0 : node), + : LayoutObject(node), m_hasTab(false), m_linesDirty(false), m_containsReversedText(false), @@ -163,15 +163,12 @@ m_firstTextBox(nullptr), m_lastTextBox(nullptr) { ASSERT(m_text); - // FIXME: Some clients of LayoutText (and subclasses) pass Document as node to - // create anonymous layoutObject. - // They should be switched to passing null and using setDocumentForAnonymous. - if (node && node->isDocumentNode()) - setDocumentForAnonymous(toDocument(node)); + DCHECK(!node || !node->isDocumentNode()); setIsText(); - view()->frameView()->incrementVisuallyNonEmptyCharacterCount(m_text.length()); + if (node) + frameView()->incrementVisuallyNonEmptyCharacterCount(m_text.length()); } #if DCHECK_IS_ON() @@ -183,6 +180,12 @@ #endif +LayoutText* LayoutText::createEmptyAnonymous(Document& doc) { + LayoutText* text = new LayoutText(nullptr, StringImpl::empty); + text->setDocumentForAnonymous(&doc); + return text; +} + bool LayoutText::isTextFragment() const { return false; }
diff --git a/third_party/WebKit/Source/core/layout/LayoutText.h b/third_party/WebKit/Source/core/layout/LayoutText.h index 2dfce8f..d95b6806 100644 --- a/third_party/WebKit/Source/core/layout/LayoutText.h +++ b/third_party/WebKit/Source/core/layout/LayoutText.h
@@ -76,6 +76,8 @@ ~LayoutText() override; #endif + static LayoutText* createEmptyAnonymous(Document&); + const char* name() const override { return "LayoutText"; } virtual bool isTextFragment() const;
diff --git a/third_party/WebKit/Source/core/layout/LayoutTextFragment.cpp b/third_party/WebKit/Source/core/layout/LayoutTextFragment.cpp index 09e5c92..3f11242 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTextFragment.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutTextFragment.cpp
@@ -26,6 +26,7 @@ #include "core/dom/PseudoElement.h" #include "core/dom/StyleChangeReason.h" #include "core/dom/Text.h" +#include "core/frame/FrameView.h" #include "core/layout/HitTestResult.h" namespace blink { @@ -50,6 +51,23 @@ ASSERT(!m_firstLetterPseudoElement); } +LayoutTextFragment* LayoutTextFragment::createAnonymous(PseudoElement& pseudo, + StringImpl* text, + unsigned start, + unsigned length) { + LayoutTextFragment* fragment = + new LayoutTextFragment(nullptr, text, start, length); + fragment->setDocumentForAnonymous(&pseudo.document()); + if (length) + pseudo.document().view()->incrementVisuallyNonEmptyCharacterCount(length); + return fragment; +} + +LayoutTextFragment* LayoutTextFragment::createAnonymous(PseudoElement& pseudo, + StringImpl* text) { + return createAnonymous(pseudo, text, 0, text ? text->length() : 0); +} + void LayoutTextFragment::willBeDestroyed() { if (m_isRemainingTextLayoutObject && m_firstLetterPseudoElement) m_firstLetterPseudoElement->setRemainingTextLayoutObject(nullptr);
diff --git a/third_party/WebKit/Source/core/layout/LayoutTextFragment.h b/third_party/WebKit/Source/core/layout/LayoutTextFragment.h index fb68a53..ea1b4d4b 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTextFragment.h +++ b/third_party/WebKit/Source/core/layout/LayoutTextFragment.h
@@ -43,6 +43,12 @@ LayoutTextFragment(Node*, StringImpl*); ~LayoutTextFragment() override; + static LayoutTextFragment* createAnonymous(PseudoElement&, StringImpl*); + static LayoutTextFragment* createAnonymous(PseudoElement&, + StringImpl*, + unsigned start, + unsigned length); + bool isTextFragment() const override { return true; } bool canBeSelectionLeaf() const override {
diff --git a/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp b/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp index 46a7df2..086b5b5 100644 --- a/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp +++ b/third_party/WebKit/Source/core/layout/PaintInvalidationState.cpp
@@ -447,6 +447,9 @@ PaintLayer::mapPointInPaintInvalidationContainerToBacking( *m_paintInvalidationContainer, point); + point.move(m_currentObject.scrollAdjustmentForPaintInvalidation( + *m_paintInvalidationContainer)); + return LayoutPoint(point); } @@ -459,7 +462,7 @@ return computeVisualRectInBackingForSVG(); LayoutRect rect = m_currentObject.localVisualRect(); - mapLocalRectToPaintInvalidationBacking(rect); + mapLocalRectToVisualRectInBacking(rect); return rect; } @@ -488,6 +491,11 @@ PaintLayer::mapRectInPaintInvalidationContainerToBacking( *m_paintInvalidationContainer, rect); + m_currentObject.adjustVisualRectForRasterEffects(rect); + + rect.move(m_currentObject.scrollAdjustmentForPaintInvalidation( + *m_paintInvalidationContainer)); + return rect; } @@ -534,12 +542,17 @@ } } -void PaintInvalidationState::mapLocalRectToPaintInvalidationBacking( +void PaintInvalidationState::mapLocalRectToVisualRectInBacking( LayoutRect& rect) const { mapLocalRectToPaintInvalidationContainer(rect); PaintLayer::mapRectInPaintInvalidationContainerToBacking( *m_paintInvalidationContainer, rect); + + m_currentObject.adjustVisualRectForRasterEffects(rect); + + rect.move(m_currentObject.scrollAdjustmentForPaintInvalidation( + *m_paintInvalidationContainer)); } void PaintInvalidationState::addClipRectRelativeToPaintOffset( @@ -632,11 +645,11 @@ paintingLayer = &paintInvalidationState.paintingLayer(); } -void PaintInvalidatorContextAdapter::mapLocalRectToPaintInvalidationBacking( +void PaintInvalidatorContextAdapter::mapLocalRectToVisualRectInBacking( const LayoutObject& object, LayoutRect& rect) const { DCHECK(&object == &m_paintInvalidationState.currentObject()); - m_paintInvalidationState.mapLocalRectToPaintInvalidationBacking(rect); + m_paintInvalidationState.mapLocalRectToVisualRectInBacking(rect); } } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/PaintInvalidationState.h b/third_party/WebKit/Source/core/layout/PaintInvalidationState.h index 2046959e..74b2ce08 100644 --- a/third_party/WebKit/Source/core/layout/PaintInvalidationState.h +++ b/third_party/WebKit/Source/core/layout/PaintInvalidationState.h
@@ -96,7 +96,7 @@ // in the space of paint invalidation backing. LayoutRect computeVisualRectInBacking() const; - void mapLocalRectToPaintInvalidationBacking(LayoutRect&) const; + void mapLocalRectToVisualRectInBacking(LayoutRect&) const; PaintLayer& paintingLayer() const; @@ -189,8 +189,8 @@ class PaintInvalidatorContextAdapter : public PaintInvalidatorContext { public: PaintInvalidatorContextAdapter(const PaintInvalidationState&); - void mapLocalRectToPaintInvalidationBacking(const LayoutObject&, - LayoutRect&) const override; + void mapLocalRectToVisualRectInBacking(const LayoutObject&, + LayoutRect&) const override; private: const PaintInvalidationState& m_paintInvalidationState;
diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp index fb58d81..f1c213b5 100644 --- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp +++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp
@@ -94,6 +94,7 @@ #include "platform/loader/fetch/ResourceRequest.h" #include "platform/network/HTTPParsers.h" #include "platform/scroll/ScrollAnimatorBase.h" +#include "platform/weborigin/SchemeRegistry.h" #include "platform/weborigin/SecurityOrigin.h" #include "platform/weborigin/SecurityPolicy.h" #include "platform/weborigin/Suborigin.h" @@ -127,6 +128,23 @@ return type == FrameLoadTypeBackForward || isReloadLoadType(type); } +static void checkForLegacyProtocolInSubresource( + const ResourceRequest& resourceRequest, + Document* document) { + if (resourceRequest.frameType() == WebURLRequest::FrameTypeTopLevel) + return; + if (!SchemeRegistry::shouldTreatURLSchemeAsLegacy( + resourceRequest.url().protocol())) { + return; + } + if (SchemeRegistry::shouldTreatURLSchemeAsLegacy( + document->getSecurityOrigin()->protocol())) { + return; + } + Deprecation::countDeprecation( + document, UseCounter::LegacyProtocolEmbeddedAsSubresource); +} + // static ResourceRequest FrameLoader::resourceRequestFromHistoryItem( HistoryItem* item, @@ -1779,6 +1797,12 @@ // is available while sending the request. probe::frameClearedScheduledClientNavigation(m_frame); } else { + // PlzNavigate + // Check for usage of legacy schemes now. Unsupported schemes will be + // rewritten by the client, so the FrameFetchContext will not be able to + // check for those when the navigation commits. + if (navigationPolicy == NavigationPolicyHandledByClient) + checkForLegacyProtocolInSubresource(resourceRequest, m_frame->document()); probe::frameScheduledClientNavigation(m_frame); }
diff --git a/third_party/WebKit/Source/core/paint/ObjectPaintInvalidator.cpp b/third_party/WebKit/Source/core/paint/ObjectPaintInvalidator.cpp index c36f9f1..7949b04 100644 --- a/third_party/WebKit/Source/core/paint/ObjectPaintInvalidator.cpp +++ b/third_party/WebKit/Source/core/paint/ObjectPaintInvalidator.cpp
@@ -589,12 +589,7 @@ if (m_object.hasSelectionVisualRect()) oldSelectionRect = selectionVisualRectMap().at(&m_object); LayoutRect newSelectionRect = m_object.localSelectionRect(); - if (!newSelectionRect.isEmpty()) { - m_context.mapLocalRectToPaintInvalidationBacking(m_object, - newSelectionRect); - newSelectionRect.move(m_object.scrollAdjustmentForPaintInvalidation( - *m_context.paintInvalidationContainer)); - } + m_context.mapLocalRectToVisualRectInBacking(m_object, newSelectionRect); setSelectionVisualRect(m_object, newSelectionRect);
diff --git a/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp index 8bca32a..3d9ec1d 100644 --- a/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp +++ b/third_party/WebKit/Source/core/paint/PaintInvalidationCapableScrollableArea.cpp
@@ -45,11 +45,7 @@ // the rect as in flipped block direction, but scrollbar controls don't // flip for block direction, so flip here to undo the flip in the function. box.flipForWritingMode(visualRect); - context.mapLocalRectToPaintInvalidationBacking(box, visualRect); - - IntSize adjustment = box.scrollAdjustmentForPaintInvalidation( - *context.paintInvalidationContainer); - visualRect.move(adjustment); + context.mapLocalRectToVisualRectInBacking(box, visualRect); } return visualRect; }
diff --git a/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp b/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp index eac9f32..1c06307 100644 --- a/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp +++ b/third_party/WebKit/Source/core/paint/PaintInvalidator.cpp
@@ -49,7 +49,7 @@ // This function is templatized to avoid FloatRect<->LayoutRect conversions // which affect performance. template <typename Rect, typename Point> -static LayoutRect mapLocalRectToPaintInvalidationBacking( +static LayoutRect mapLocalRectToVisualRectInBacking( const LayoutObject& object, const Rect& localRect, const PaintInvalidatorContext& context, @@ -144,14 +144,17 @@ PaintLayer::mapRectInPaintInvalidationContainerToBacking( *context.paintInvalidationContainer, result); + result.move(object.scrollAdjustmentForPaintInvalidation( + *context.paintInvalidationContainer)); + return result; } -void PaintInvalidatorContext::mapLocalRectToPaintInvalidationBacking( +void PaintInvalidatorContext::mapLocalRectToVisualRectInBacking( const LayoutObject& object, LayoutRect& rect) const { std::unique_ptr<GeometryMapper> geometryMapper = GeometryMapper::create(); - rect = blink::mapLocalRectToPaintInvalidationBacking<LayoutRect, LayoutPoint>( + rect = blink::mapLocalRectToVisualRectInBacking<LayoutRect, LayoutPoint>( object, rect, *this, *geometryMapper); } @@ -160,10 +163,10 @@ const PaintInvalidatorContext& context) { if (object.isSVGChild()) { FloatRect localRect = SVGLayoutSupport::localVisualRect(object); - return mapLocalRectToPaintInvalidationBacking<FloatRect, FloatPoint>( + return mapLocalRectToVisualRectInBacking<FloatRect, FloatPoint>( object, localRect, context, m_geometryMapper); } - return mapLocalRectToPaintInvalidationBacking<LayoutRect, LayoutPoint>( + return mapLocalRectToVisualRectInBacking<LayoutRect, LayoutPoint>( object, object.localVisualRect(), context, m_geometryMapper); } @@ -201,6 +204,9 @@ point = LayoutPoint(floatPoint); } + point.move(object.scrollAdjustmentForPaintInvalidation( + *context.paintInvalidationContainer)); + return point; } @@ -365,18 +371,13 @@ context.oldVisualRect = object.visualRect(); context.oldLocation = objectPaintInvalidator.locationInBacking(); - IntSize adjustment = object.scrollAdjustmentForPaintInvalidation( - *context.paintInvalidationContainer); LayoutRect newVisualRect = computeVisualRectInBacking(object, context); - newVisualRect.move(adjustment); - if (object.isText()) { // Use visual rect location for LayoutTexts because it suffices to check // whether a visual rect changes for layout caused invalidation. context.newLocation = newVisualRect.location(); } else { context.newLocation = computeLocationInBacking(object, context); - context.newLocation.move(adjustment); // Location of empty visual rect doesn't affect paint invalidation. Set it // to newLocation to avoid saving the previous location separately in
diff --git a/third_party/WebKit/Source/core/paint/PaintInvalidator.h b/third_party/WebKit/Source/core/paint/PaintInvalidator.h index f82fd91..6bdf3804 100644 --- a/third_party/WebKit/Source/core/paint/PaintInvalidator.h +++ b/third_party/WebKit/Source/core/paint/PaintInvalidator.h
@@ -36,8 +36,8 @@ // This method is temporary to adapt PaintInvalidatorContext and the legacy // PaintInvalidationState for code shared by old code and new code. - virtual void mapLocalRectToPaintInvalidationBacking(const LayoutObject&, - LayoutRect&) const; + virtual void mapLocalRectToVisualRectInBacking(const LayoutObject&, + LayoutRect&) const; const PaintPropertyTreeBuilderContext& treeBuilderContext; const PaintInvalidatorContext* parentContext;
diff --git a/third_party/WebKit/Source/core/style/ContentData.cpp b/third_party/WebKit/Source/core/style/ContentData.cpp index 13149fd..693594c 100644 --- a/third_party/WebKit/Source/core/style/ContentData.cpp +++ b/third_party/WebKit/Source/core/style/ContentData.cpp
@@ -22,6 +22,8 @@ #include "core/style/ContentData.h" +#include <memory> +#include "core/dom/PseudoElement.h" #include "core/layout/LayoutCounter.h" #include "core/layout/LayoutImage.h" #include "core/layout/LayoutImageResource.h" @@ -29,7 +31,6 @@ #include "core/layout/LayoutQuote.h" #include "core/layout/LayoutTextFragment.h" #include "core/style/ComputedStyle.h" -#include <memory> namespace blink { @@ -68,9 +69,9 @@ } LayoutObject* ImageContentData::createLayoutObject( - Document& doc, + PseudoElement& pseudo, ComputedStyle& pseudoStyle) const { - LayoutImage* image = LayoutImage::createAnonymous(&doc); + LayoutImage* image = LayoutImage::createAnonymous(pseudo); image->setPseudoStyle(&pseudoStyle); if (m_image) image->setImageResource( @@ -86,25 +87,26 @@ } LayoutObject* TextContentData::createLayoutObject( - Document& doc, + PseudoElement& pseudo, ComputedStyle& pseudoStyle) const { - LayoutObject* layoutObject = new LayoutTextFragment(&doc, m_text.impl()); + LayoutObject* layoutObject = + LayoutTextFragment::createAnonymous(pseudo, m_text.impl()); layoutObject->setPseudoStyle(&pseudoStyle); return layoutObject; } LayoutObject* CounterContentData::createLayoutObject( - Document& doc, + PseudoElement& pseudo, ComputedStyle& pseudoStyle) const { - LayoutObject* layoutObject = new LayoutCounter(&doc, *m_counter); + LayoutObject* layoutObject = new LayoutCounter(pseudo, *m_counter); layoutObject->setPseudoStyle(&pseudoStyle); return layoutObject; } LayoutObject* QuoteContentData::createLayoutObject( - Document& doc, + PseudoElement& pseudo, ComputedStyle& pseudoStyle) const { - LayoutObject* layoutObject = new LayoutQuote(&doc, m_quote); + LayoutObject* layoutObject = new LayoutQuote(pseudo, m_quote); layoutObject->setPseudoStyle(&pseudoStyle); return layoutObject; }
diff --git a/third_party/WebKit/Source/core/style/ContentData.h b/third_party/WebKit/Source/core/style/ContentData.h index 0b25bcc..de0d47c 100644 --- a/third_party/WebKit/Source/core/style/ContentData.h +++ b/third_party/WebKit/Source/core/style/ContentData.h
@@ -33,9 +33,9 @@ namespace blink { -class Document; -class LayoutObject; class ComputedStyle; +class LayoutObject; +class PseudoElement; class ContentData : public GarbageCollectedFinalized<ContentData> { public: @@ -51,7 +51,8 @@ virtual bool isQuote() const { return false; } virtual bool isText() const { return false; } - virtual LayoutObject* createLayoutObject(Document&, ComputedStyle&) const = 0; + virtual LayoutObject* createLayoutObject(PseudoElement&, + ComputedStyle&) const = 0; virtual ContentData* clone() const; @@ -84,7 +85,8 @@ } bool isImage() const override { return true; } - LayoutObject* createLayoutObject(Document&, ComputedStyle&) const override; + LayoutObject* createLayoutObject(PseudoElement&, + ComputedStyle&) const override; bool equals(const ContentData& data) const override { if (!data.isImage()) @@ -115,7 +117,8 @@ void setText(const String& text) { m_text = text; } bool isText() const override { return true; } - LayoutObject* createLayoutObject(Document&, ComputedStyle&) const override; + LayoutObject* createLayoutObject(PseudoElement&, + ComputedStyle&) const override; bool equals(const ContentData& data) const override { if (!data.isText()) @@ -143,7 +146,8 @@ } bool isCounter() const override { return true; } - LayoutObject* createLayoutObject(Document&, ComputedStyle&) const override; + LayoutObject* createLayoutObject(PseudoElement&, + ComputedStyle&) const override; private: CounterContentData(std::unique_ptr<CounterContent> counter) @@ -175,7 +179,8 @@ void setQuote(QuoteType quote) { m_quote = quote; } bool isQuote() const override { return true; } - LayoutObject* createLayoutObject(Document&, ComputedStyle&) const override; + LayoutObject* createLayoutObject(PseudoElement&, + ComputedStyle&) const override; bool equals(const ContentData& data) const override { if (!data.isQuote())
diff --git a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp index c33cefd..06046a5 100644 --- a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp +++ b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
@@ -15,6 +15,8 @@ #include "modules/imagecapture/PhotoCapabilities.h" #include "modules/imagecapture/PhotoSettings.h" #include "modules/mediastream/MediaStreamTrack.h" +#include "modules/mediastream/MediaTrackCapabilities.h" +#include "platform/WaitableEvent.h" #include "platform/mojo/MojoHelper.h" #include "public/platform/InterfaceProvider.h" #include "public/platform/Platform.h" @@ -56,6 +58,22 @@ return media::mojom::blink::FillLightMode::NONE; } +WebString toString(media::mojom::blink::MeteringMode value) { + switch (value) { + case media::mojom::blink::MeteringMode::NONE: + return WebString::fromUTF8("none"); + case media::mojom::blink::MeteringMode::MANUAL: + return WebString::fromUTF8("manual"); + case media::mojom::blink::MeteringMode::SINGLE_SHOT: + return WebString::fromUTF8("single-shot"); + case media::mojom::blink::MeteringMode::CONTINUOUS: + return WebString::fromUTF8("continuous"); + default: + NOTREACHED() << "Unknown MeteringMode"; + } + return WebString(); +} + } // anonymous namespace ImageCapture* ImageCapture::create(ExecutionContext* context, @@ -267,6 +285,10 @@ return promise; } +MediaTrackCapabilities& ImageCapture::getMediaTrackCapabilities() { + return m_capabilities; +} + ImageCapture::ImageCapture(ExecutionContext* context, MediaStreamTrack* track) : ContextLifecycleObserver(context), m_streamTrack(track) { DCHECK(m_streamTrack); @@ -277,6 +299,13 @@ m_service.set_connection_error_handler(convertToBaseCallback(WTF::bind( &ImageCapture::onServiceConnectionError, wrapWeakPersistent(this)))); + + // Launch a retrieval of the current capabilities, which arrive asynchronously + // to avoid blocking the main UI thread. + m_service->GetCapabilities( + m_streamTrack->component()->source()->id(), + convertToBaseCallback(WTF::bind(&ImageCapture::onCapabilitiesBootstrap, + wrapPersistent(this)))); } void ImageCapture::onCapabilities( @@ -288,57 +317,35 @@ if (capabilities.is_null()) { resolver->reject(DOMException::create(UnknownError, "platform error")); } else { - // TODO(mcasas): Should be using a mojo::StructTraits. - MediaSettingsRange* iso = MediaSettingsRange::create( - capabilities->iso->max, capabilities->iso->min, - capabilities->iso->current, capabilities->iso->step); - MediaSettingsRange* height = MediaSettingsRange::create( - capabilities->height->max, capabilities->height->min, - capabilities->height->current, capabilities->height->step); - MediaSettingsRange* width = MediaSettingsRange::create( - capabilities->width->max, capabilities->width->min, - capabilities->width->current, capabilities->width->step); - MediaSettingsRange* zoom = MediaSettingsRange::create( - capabilities->zoom->max, capabilities->zoom->min, - capabilities->zoom->current, capabilities->zoom->step); - MediaSettingsRange* exposureCompensation = - MediaSettingsRange::create(capabilities->exposure_compensation->max, - capabilities->exposure_compensation->min, - capabilities->exposure_compensation->current, - capabilities->exposure_compensation->step); - MediaSettingsRange* colorTemperature = - MediaSettingsRange::create(capabilities->color_temperature->max, - capabilities->color_temperature->min, - capabilities->color_temperature->current, - capabilities->color_temperature->step); - MediaSettingsRange* brightness = MediaSettingsRange::create( - capabilities->brightness->max, capabilities->brightness->min, - capabilities->brightness->current, capabilities->brightness->step); - MediaSettingsRange* contrast = MediaSettingsRange::create( - capabilities->contrast->max, capabilities->contrast->min, - capabilities->contrast->current, capabilities->contrast->step); - MediaSettingsRange* saturation = MediaSettingsRange::create( - capabilities->saturation->max, capabilities->saturation->min, - capabilities->saturation->current, capabilities->saturation->step); - MediaSettingsRange* sharpness = MediaSettingsRange::create( - capabilities->sharpness->max, capabilities->sharpness->min, - capabilities->sharpness->current, capabilities->sharpness->step); PhotoCapabilities* caps = PhotoCapabilities::create(); - caps->setIso(iso); - caps->setImageHeight(height); - caps->setImageWidth(width); - caps->setZoom(zoom); + // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when + // mojo::StructTraits supports garbage-collected mappings, + // https://crbug.com/700180. + caps->setIso(MediaSettingsRange::create(std::move(capabilities->iso))); + caps->setImageHeight( + MediaSettingsRange::create(std::move(capabilities->height))); + caps->setImageWidth( + MediaSettingsRange::create(std::move(capabilities->width))); + caps->setZoom(MediaSettingsRange::create(std::move(capabilities->zoom))); + caps->setExposureCompensation(MediaSettingsRange::create( + std::move(capabilities->exposure_compensation))); + caps->setColorTemperature( + MediaSettingsRange::create(std::move(capabilities->color_temperature))); + caps->setBrightness( + MediaSettingsRange::create(std::move(capabilities->brightness))); + caps->setContrast( + MediaSettingsRange::create(std::move(capabilities->contrast))); + caps->setSaturation( + MediaSettingsRange::create(std::move(capabilities->saturation))); + caps->setSharpness( + MediaSettingsRange::create(std::move(capabilities->sharpness))); + caps->setFocusMode(capabilities->focus_mode); caps->setExposureMode(capabilities->exposure_mode); - caps->setExposureCompensation(exposureCompensation); caps->setWhiteBalanceMode(capabilities->white_balance_mode); caps->setFillLightMode(capabilities->fill_light_mode); + caps->setRedEyeReduction(capabilities->red_eye_reduction); - caps->setColorTemperature(colorTemperature); - caps->setBrightness(brightness); - caps->setContrast(contrast); - caps->setSaturation(saturation); - caps->setSharpness(sharpness); resolver->resolve(caps); } m_serviceRequests.erase(resolver); @@ -369,6 +376,65 @@ m_serviceRequests.erase(resolver); } +void ImageCapture::onCapabilitiesBootstrap( + media::mojom::blink::PhotoCapabilitiesPtr capabilities) { + DVLOG(1) << __func__; + if (capabilities.is_null()) + return; + + // TODO(mcasas): adapt the mojo interface to return a list of supported Modes + // when moving these out of PhotoCapabilities, https://crbug.com/700607. + m_capabilities.setWhiteBalanceMode( + WTF::Vector<WTF::String>({toString(capabilities->white_balance_mode)})); + m_capabilities.setExposureMode( + WTF::Vector<WTF::String>({toString(capabilities->exposure_mode)})); + m_capabilities.setFocusMode( + WTF::Vector<WTF::String>({toString(capabilities->focus_mode)})); + + // TODO(mcasas): Remove the explicit MediaSettingsRange::create() when + // mojo::StructTraits supports garbage-collected mappings, + // https://crbug.com/700180. + if (capabilities->exposure_compensation->max != + capabilities->exposure_compensation->min) { + m_capabilities.setExposureCompensation(MediaSettingsRange::create( + std::move(capabilities->exposure_compensation))); + } + if (capabilities->color_temperature->max != + capabilities->color_temperature->min) { + m_capabilities.setColorTemperature( + MediaSettingsRange::create(std::move(capabilities->color_temperature))); + } + if (capabilities->iso->max != capabilities->iso->min) { + m_capabilities.setIso( + MediaSettingsRange::create(std::move(capabilities->iso))); + } + + if (capabilities->brightness->max != capabilities->brightness->min) { + m_capabilities.setBrightness( + MediaSettingsRange::create(std::move(capabilities->brightness))); + } + if (capabilities->contrast->max != capabilities->contrast->min) { + m_capabilities.setContrast( + MediaSettingsRange::create(std::move(capabilities->contrast))); + } + if (capabilities->saturation->max != capabilities->saturation->min) { + m_capabilities.setSaturation( + MediaSettingsRange::create(std::move(capabilities->saturation))); + } + if (capabilities->sharpness->max != capabilities->sharpness->min) { + m_capabilities.setSharpness( + MediaSettingsRange::create(std::move(capabilities->sharpness))); + } + + if (capabilities->zoom->max != capabilities->zoom->min) { + m_capabilities.setZoom( + MediaSettingsRange::create(std::move(capabilities->zoom))); + } + + // TODO(mcasas): do |torch| when the mojom interface is updated, + // https://crbug.com/700607. +} + void ImageCapture::onServiceConnectionError() { m_service.reset(); for (ScriptPromiseResolver* resolver : m_serviceRequests) @@ -378,6 +444,7 @@ DEFINE_TRACE(ImageCapture) { visitor->trace(m_streamTrack); + visitor->trace(m_capabilities); visitor->trace(m_serviceRequests); EventTargetWithInlineData::trace(visitor); ContextLifecycleObserver::trace(visitor);
diff --git a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.h b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.h index 45d2486..84de0da 100644 --- a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.h +++ b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.h
@@ -5,6 +5,7 @@ #ifndef ImageCapture_h #define ImageCapture_h +#include <memory> #include "bindings/core/v8/ActiveScriptWrappable.h" #include "bindings/core/v8/ScriptPromise.h" #include "core/dom/ContextLifecycleObserver.h" @@ -12,8 +13,8 @@ #include "media/capture/mojo/image_capture.mojom-blink.h" #include "modules/EventTargetModules.h" #include "modules/ModulesExport.h" +#include "modules/mediastream/MediaTrackCapabilities.h" #include "platform/AsyncMethodRunner.h" -#include <memory> namespace blink { @@ -58,6 +59,8 @@ ScriptPromise grabFrame(ScriptState*, ExceptionState&); + MediaTrackCapabilities& getMediaTrackCapabilities(); + DECLARE_VIRTUAL_TRACE(); private: @@ -67,11 +70,13 @@ media::mojom::blink::PhotoCapabilitiesPtr); void onSetOptions(ScriptPromiseResolver*, bool); void onTakePhoto(ScriptPromiseResolver*, media::mojom::blink::BlobPtr); + void onCapabilitiesBootstrap(media::mojom::blink::PhotoCapabilitiesPtr); void onServiceConnectionError(); Member<MediaStreamTrack> m_streamTrack; std::unique_ptr<WebImageCaptureFrameGrabber> m_frameGrabber; media::mojom::blink::ImageCapturePtr m_service; + MediaTrackCapabilities m_capabilities; HeapHashSet<Member<ScriptPromiseResolver>> m_serviceRequests; };
diff --git a/third_party/WebKit/Source/modules/imagecapture/MediaSettingsRange.h b/third_party/WebKit/Source/modules/imagecapture/MediaSettingsRange.h index fc5d71f1..3809800 100644 --- a/third_party/WebKit/Source/modules/imagecapture/MediaSettingsRange.h +++ b/third_party/WebKit/Source/modules/imagecapture/MediaSettingsRange.h
@@ -6,6 +6,7 @@ #define MediaSettingsRange_h #include "bindings/core/v8/ScriptWrappable.h" +#include "media/capture/mojo/image_capture.mojom-blink.h" namespace blink { @@ -20,6 +21,10 @@ double step) { return new MediaSettingsRange(max, min, current, step); } + static MediaSettingsRange* create(media::mojom::blink::RangePtr range) { + return MediaSettingsRange::create(range->max, range->min, range->current, + range->step); + } double max() const { return m_max; } double min() const { return m_min; }
diff --git a/third_party/WebKit/Source/modules/mediastream/DEPS b/third_party/WebKit/Source/modules/mediastream/DEPS index 776c504..77698c1 100644 --- a/third_party/WebKit/Source/modules/mediastream/DEPS +++ b/third_party/WebKit/Source/modules/mediastream/DEPS
@@ -5,6 +5,7 @@ "+modules/EventModules.h", "+modules/EventTargetModules.h", "+modules/ModulesExport.h", + "+modules/imagecapture", "+modules/mediastream", "+platform", "+public/platform",
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp index 0777b002..9c077a3 100644 --- a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp +++ b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp
@@ -25,21 +25,23 @@ #include "modules/mediastream/MediaStreamTrack.h" +#include <memory> #include "bindings/core/v8/ExceptionMessages.h" #include "core/dom/Document.h" #include "core/dom/ExceptionCode.h" #include "core/dom/ExecutionContext.h" #include "core/events/Event.h" #include "core/frame/Deprecation.h" +#include "modules/imagecapture/ImageCapture.h" #include "modules/mediastream/MediaConstraintsImpl.h" #include "modules/mediastream/MediaStream.h" +#include "modules/mediastream/MediaTrackCapabilities.h" #include "modules/mediastream/MediaTrackSettings.h" #include "modules/mediastream/UserMediaController.h" #include "platform/mediastream/MediaStreamCenter.h" #include "platform/mediastream/MediaStreamComponent.h" #include "public/platform/WebMediaStreamTrack.h" #include "wtf/Assertions.h" -#include <memory> namespace blink { @@ -66,6 +68,13 @@ // The source's constraints aren't yet initialized at creation time. m_constraints() { m_component->source()->addObserver(this); + + if (m_component->source() && + m_component->source()->type() == MediaStreamSource::TypeVideo) { + // ImageCapture::create() only throws if |this| track is not of video type. + NonThrowableExceptionState exceptionState; + m_imageCapture = ImageCapture::create(context, this, exceptionState); + } } MediaStreamTrack::~MediaStreamTrack() {} @@ -212,6 +221,11 @@ m_constraints = constraints; } +void MediaStreamTrack::getCapabilities(MediaTrackCapabilities& capabilities) { + if (m_imageCapture) + capabilities = m_imageCapture->getMediaTrackCapabilities(); +} + void MediaStreamTrack::getSettings(MediaTrackSettings& settings) { WebMediaStreamTrack::Settings platformSettings; m_component->getSettings(platformSettings); @@ -344,6 +358,7 @@ DEFINE_TRACE(MediaStreamTrack) { visitor->trace(m_registeredMediaStreams); visitor->trace(m_component); + visitor->trace(m_imageCapture); EventTargetWithInlineData::trace(visitor); ContextLifecycleObserver::trace(visitor); }
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.h b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.h index 911e64e..8c19b95d 100644 --- a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.h +++ b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.h
@@ -40,6 +40,8 @@ class AudioSourceProvider; class ExceptionState; +class ImageCapture; +class MediaTrackCapabilities; class MediaTrackConstraints; class MediaStream; class MediaTrackSettings; @@ -80,6 +82,7 @@ // Called from UserMediaRequest when it succeeds. It is not IDL-exposed. void setConstraints(const WebMediaConstraints&); + void getCapabilities(MediaTrackCapabilities&); void getSettings(MediaTrackSettings&); DEFINE_ATTRIBUTE_EVENT_LISTENER(mute); @@ -122,6 +125,7 @@ bool m_stopped; Member<MediaStreamComponent> m_component; WebMediaConstraints m_constraints; + Member<ImageCapture> m_imageCapture; }; typedef HeapVector<Member<MediaStreamTrack>> MediaStreamTrackVector;
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.idl b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.idl index 175801f..8e1b0cb9 100644 --- a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.idl +++ b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.idl
@@ -49,6 +49,8 @@ [CallWith=ScriptState] MediaStreamTrack clone(); [ImplementedAs=stopTrack, RaisesException] void stop(); + + [RuntimeEnabled=ImageCapture] MediaTrackCapabilities getCapabilities(); [RuntimeEnabled=MediaConstraints] MediaTrackConstraints getConstraints(); [RuntimeEnabled=MediaGetSettings] MediaTrackSettings getSettings(); };
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaTrackCapabilities.idl b/third_party/WebKit/Source/modules/mediastream/MediaTrackCapabilities.idl new file mode 100644 index 0000000..84265fe7 --- /dev/null +++ b/third_party/WebKit/Source/modules/mediastream/MediaTrackCapabilities.idl
@@ -0,0 +1,22 @@ +// Copyright 2017 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. + +dictionary MediaTrackCapabilities { + // W3C Image Capture API + // https://w3c.github.io/mediacapture-image/#mediatrackcapabilities-section + // TODO(mcasas) move out when partial dictionaries are supported + // http://crbug.com/579896. + [RuntimeEnabled=ImageCapture] sequence<DOMString> whiteBalanceMode; + [RuntimeEnabled=ImageCapture] sequence<DOMString> exposureMode; + [RuntimeEnabled=ImageCapture] sequence<DOMString> focusMode; + [RuntimeEnabled=ImageCapture] MediaSettingsRange exposureCompensation; + [RuntimeEnabled=ImageCapture] MediaSettingsRange colorTemperature; + [RuntimeEnabled=ImageCapture] MediaSettingsRange iso; + [RuntimeEnabled=ImageCapture] MediaSettingsRange brightness; + [RuntimeEnabled=ImageCapture] MediaSettingsRange contrast; + [RuntimeEnabled=ImageCapture] MediaSettingsRange saturation; + [RuntimeEnabled=ImageCapture] MediaSettingsRange sharpness; + [RuntimeEnabled=ImageCapture] MediaSettingsRange zoom; + [RuntimeEnabled=ImageCapture] boolean torch; +};
diff --git a/third_party/WebKit/Source/modules/modules_idl_files.gni b/third_party/WebKit/Source/modules/modules_idl_files.gni index 543de29..81fb00c 100644 --- a/third_party/WebKit/Source/modules/modules_idl_files.gni +++ b/third_party/WebKit/Source/modules/modules_idl_files.gni
@@ -456,6 +456,7 @@ "mediastream/MediaStreamConstraints.idl", "mediastream/MediaStreamEventInit.idl", "mediastream/MediaStreamTrackEventInit.idl", + "mediastream/MediaTrackCapabilities.idl", "mediastream/MediaTrackConstraintSet.idl", "mediastream/MediaTrackConstraints.idl", "mediastream/MediaTrackSettings.idl", @@ -812,6 +813,8 @@ "$blink_modules_output_dir/mediastream/MediaStreamEventInit.h", "$blink_modules_output_dir/mediastream/MediaStreamTrackEventInit.cpp", "$blink_modules_output_dir/mediastream/MediaStreamTrackEventInit.h", + "$blink_modules_output_dir/mediastream/MediaTrackCapabilities.cpp", + "$blink_modules_output_dir/mediastream/MediaTrackCapabilities.h", "$blink_modules_output_dir/mediastream/MediaTrackConstraintSet.cpp", "$blink_modules_output_dir/mediastream/MediaTrackConstraintSet.h", "$blink_modules_output_dir/mediastream/MediaTrackConstraints.cpp",
diff --git a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 index 736087a..95748be8 100644 --- a/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5 +++ b/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.json5
@@ -539,7 +539,7 @@ }, { name: "MediaGetSettings", - status: "experimental", + status: "stable", }, // MediaSession is enabled by default on Android only. // TODO(rbyers): Add parameter to specify platform.
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.cpp b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.cpp index d4ac4fa..08180a6 100644 --- a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.cpp +++ b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.cpp
@@ -338,7 +338,7 @@ smallCapsIterator.consume(&numCharactersUntilCaseChange, &smallCapsBehavior); if (numCharactersUntilCaseChange > 0 && numCharactersUntilCaseChange < currentQueueItem.m_numCharacters) { - queue->prepend(blink::HolesQueueItem( + queue->push_front(blink::HolesQueueItem( blink::HolesQueueItemAction::HolesQueueRange, currentQueueItem.m_startIndex + numCharactersUntilCaseChange, currentQueueItem.m_numCharacters - numCharactersUntilCaseChange));
diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp index 1e530ca..8197382b 100644 --- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp +++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
@@ -369,7 +369,7 @@ void Canvas2DLayerBridge::createMailboxInfo() { MailboxInfo tmp; tmp.m_parentLayerBridge = this; - m_mailboxes.prepend(tmp); + m_mailboxes.push_front(tmp); } bool Canvas2DLayerBridge::prepareMailboxFromImage(
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp index 7be1e65..b967171 100644 --- a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp +++ b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp
@@ -433,7 +433,7 @@ while (m_recycledColorBufferQueue.size() >= cacheLimit) m_recycledColorBufferQueue.takeLast(); - m_recycledColorBufferQueue.prepend(colorBuffer); + m_recycledColorBufferQueue.push_front(colorBuffer); } void DrawingBuffer::mailboxReleasedSoftware(
diff --git a/third_party/WebKit/Source/platform/heap/HeapCompactTest.cpp b/third_party/WebKit/Source/platform/heap/HeapCompactTest.cpp index 7583806..1b097674 100644 --- a/third_party/WebKit/Source/platform/heap/HeapCompactTest.cpp +++ b/third_party/WebKit/Source/platform/heap/HeapCompactTest.cpp
@@ -318,7 +318,7 @@ TEST(HeapCompactTest, CompactDeques) { Persistent<IntDeque> deque = new IntDeque; for (int i = 0; i < 8; ++i) { - deque->prepend(IntWrapper::create(i)); + deque->push_front(IntWrapper::create(i)); } EXPECT_EQ(8u, deque->size()); @@ -336,7 +336,7 @@ for (int i = 0; i < 8; ++i) { IntWrapper* value = IntWrapper::create(i); IntVector vector = IntVector(8, value); - deque->prepend(vector); + deque->push_front(vector); } EXPECT_EQ(8u, deque->size());
diff --git a/third_party/WebKit/Source/platform/text/SegmentedString.cpp b/third_party/WebKit/Source/platform/text/SegmentedString.cpp index 98131fc1..e7ceffa 100644 --- a/third_party/WebKit/Source/platform/text/SegmentedString.cpp +++ b/third_party/WebKit/Source/platform/text/SegmentedString.cpp
@@ -104,7 +104,7 @@ updateAdvanceFunctionPointers(); } else { // Shift our m_currentString into our list. - m_substrings.prepend(m_currentString); + m_substrings.push_front(m_currentString); m_currentString = s; updateAdvanceFunctionPointers(); }
diff --git a/third_party/WebKit/Source/web/WebSerializedScriptValue.cpp b/third_party/WebKit/Source/web/WebSerializedScriptValue.cpp index 082e2cf..5b48508 100644 --- a/third_party/WebKit/Source/web/WebSerializedScriptValue.cpp +++ b/third_party/WebKit/Source/web/WebSerializedScriptValue.cpp
@@ -43,10 +43,11 @@ } WebSerializedScriptValue WebSerializedScriptValue::serialize( + v8::Isolate* isolate, v8::Local<v8::Value> value) { DummyExceptionStateForTesting exceptionState; WebSerializedScriptValue serializedValue = SerializedScriptValue::serialize( - v8::Isolate::GetCurrent(), value, nullptr, nullptr, exceptionState); + isolate, value, nullptr, nullptr, exceptionState); if (exceptionState.hadException()) return createInvalid(); return serializedValue; @@ -68,8 +69,9 @@ return m_private->toWireString(); } -v8::Local<v8::Value> WebSerializedScriptValue::deserialize() { - return m_private->deserialize(); +v8::Local<v8::Value> WebSerializedScriptValue::deserialize( + v8::Isolate* isolate) { + return m_private->deserialize(isolate); } WebSerializedScriptValue::WebSerializedScriptValue(
diff --git a/third_party/WebKit/Source/web/tests/WebViewTest.cpp b/third_party/WebKit/Source/web/tests/WebViewTest.cpp index 12a81f4a..9e68ace2 100644 --- a/third_party/WebKit/Source/web/tests/WebViewTest.cpp +++ b/third_party/WebKit/Source/web/tests/WebViewTest.cpp
@@ -279,6 +279,23 @@ INSTANTIATE_TEST_CASE_P(All, WebViewTest, ::testing::Bool()); +TEST_P(WebViewTest, HitTestVideo) { + // Test that hit tests on parts of a video element result in hits on the video + // element itself as opposed to its child elements. + std::string url = registerMockedHttpURLLoad("video_200x200.html"); + WebView* webView = m_webViewHelper.initializeAndLoad(url, true, 0); + webView->resize(WebSize(200, 200)); + + // Center of video. + EXPECT_EQ("video", hitTestElementId(webView, 100, 100)); + + // Play button. + EXPECT_EQ("video", hitTestElementId(webView, 10, 195)); + + // Timeline bar. + EXPECT_EQ("video", hitTestElementId(webView, 100, 195)); +} + TEST_P(WebViewTest, HitTestContentEditableImageMaps) { std::string url = registerMockedHttpURLLoad("content-editable-image-maps.html");
diff --git a/third_party/WebKit/Source/web/tests/data/video_200x200.html b/third_party/WebKit/Source/web/tests/data/video_200x200.html new file mode 100644 index 0000000..73c8b992 --- /dev/null +++ b/third_party/WebKit/Source/web/tests/data/video_200x200.html
@@ -0,0 +1,6 @@ +<!DOCTYPE html> +<html> +<body style="margin:0px"> +<video id="video" controls src="test.webm" width=200 height=200 /> +</body> +</html>
diff --git a/third_party/WebKit/Source/wtf/Deque.h b/third_party/WebKit/Source/wtf/Deque.h index aaed1c9..bb7aa0a7 100644 --- a/third_party/WebKit/Source/wtf/Deque.h +++ b/third_party/WebKit/Source/wtf/Deque.h
@@ -126,17 +126,13 @@ const T& operator[](size_t i) const { return at(i); } template <typename U> - void prepend(U&&); + void push_front(U&&); void erase(iterator&); void erase(const_iterator&); // STL compatibility. template <typename U> void push_back(U&&); - template <typename U> - void push_front(U&& u) { - prepend(std::forward<U>(u)); - } void pop_back(); void pop_front(); bool empty() const { return isEmpty(); } @@ -506,7 +502,7 @@ template <typename T, size_t inlineCapacity, typename Allocator> template <typename U> -inline void Deque<T, inlineCapacity, Allocator>::prepend(U&& value) { +inline void Deque<T, inlineCapacity, Allocator>::push_front(U&& value) { expandCapacityIfNeeded(); if (!m_start) m_start = m_buffer.capacity() - 1;
diff --git a/third_party/WebKit/Source/wtf/DequeTest.cpp b/third_party/WebKit/Source/wtf/DequeTest.cpp index 3e1971a..d4e2655 100644 --- a/third_party/WebKit/Source/wtf/DequeTest.cpp +++ b/third_party/WebKit/Source/wtf/DequeTest.cpp
@@ -221,7 +221,7 @@ size_t count = 1025; destructNumber = 0; for (size_t i = 0; i < count; ++i) - deque.prepend(WTF::wrapUnique(new DestructCounter(i, &destructNumber))); + deque.push_front(WTF::wrapUnique(new DestructCounter(i, &destructNumber))); // Deque relocation must not destruct std::unique_ptr element. EXPECT_EQ(0, destructNumber); @@ -512,8 +512,8 @@ Deque<Pointer> deque; deque.push_back(Pointer(new int(1))); deque.push_back(Pointer(new int(2))); - deque.prepend(Pointer(new int(-1))); - deque.prepend(Pointer(new int(-2))); + deque.push_front(Pointer(new int(-1))); + deque.push_front(Pointer(new int(-2))); ASSERT_EQ(4u, deque.size()); EXPECT_EQ(-2, *deque[0]); EXPECT_EQ(-1, *deque[1]);
diff --git a/third_party/WebKit/public/web/WebSerializedScriptValue.h b/third_party/WebKit/public/web/WebSerializedScriptValue.h index 4d6bf07..c81d45f 100644 --- a/third_party/WebKit/public/web/WebSerializedScriptValue.h +++ b/third_party/WebKit/public/web/WebSerializedScriptValue.h
@@ -35,6 +35,7 @@ #include "public/platform/WebPrivatePtr.h" namespace v8 { +class Isolate; class Value; template <class T> class Local; @@ -60,7 +61,8 @@ // Creates a serialized script value from its wire format data. BLINK_EXPORT static WebSerializedScriptValue fromString(const WebString&); - BLINK_EXPORT static WebSerializedScriptValue serialize(v8::Local<v8::Value>); + BLINK_EXPORT static WebSerializedScriptValue serialize(v8::Isolate*, + v8::Local<v8::Value>); // Create a WebSerializedScriptValue that represents a serialization error. BLINK_EXPORT static WebSerializedScriptValue createInvalid(); @@ -74,7 +76,7 @@ BLINK_EXPORT WebString toString() const; // Convert the serialized value to a parsed v8 value. - BLINK_EXPORT v8::Local<v8::Value> deserialize(); + BLINK_EXPORT v8::Local<v8::Value> deserialize(v8::Isolate*); #if BLINK_IMPLEMENTATION WebSerializedScriptValue(WTF::PassRefPtr<SerializedScriptValue>);
diff --git a/third_party/closure_compiler/compile_js.gypi b/third_party/closure_compiler/compile_js.gypi index fc2d51d..3e347587 100644 --- a/third_party/closure_compiler/compile_js.gypi +++ b/third_party/closure_compiler/compile_js.gypi
@@ -38,12 +38,13 @@ 'disabled_closure_args%': '<(default_disabled_closure_args)', }, 'inputs': [ - 'compile_js.gypi', - '<(CLOSURE_DIR)/compile.py', - '<(CLOSURE_DIR)/processor.py', '<(CLOSURE_DIR)/build/inputs.py', '<(CLOSURE_DIR)/build/outputs.py', + '<(CLOSURE_DIR)/closure_args.gypi', + '<(CLOSURE_DIR)/compile.py', + '<(CLOSURE_DIR)/compile_js.gypi', '<(CLOSURE_DIR)/compiler/compiler.jar', + '<(CLOSURE_DIR)/processor.py', '<!@(python <(CLOSURE_DIR)/build/inputs.py <@(source_files) -d <@(depends) -e <@(externs))', ], 'outputs': [
diff --git a/third_party/closure_compiler/compile_js2.gypi b/third_party/closure_compiler/compile_js2.gypi index b2fec53d7..147ab9f 100644 --- a/third_party/closure_compiler/compile_js2.gypi +++ b/third_party/closure_compiler/compile_js2.gypi
@@ -46,12 +46,13 @@ }, 'inputs': [ - '<(CLOSURE_DIR)/compile_js2.gypi', + '<(CLOSURE_DIR)/build/outputs.py', + '<(CLOSURE_DIR)/closure_args.gypi', '<(CLOSURE_DIR)/compile2.py', + '<(CLOSURE_DIR)/compile_js2.gypi', + '<(CLOSURE_DIR)/compiler/compiler.jar', '<(CLOSURE_DIR)/include_js.gypi', '<(CLOSURE_DIR)/processor.py', - '<(CLOSURE_DIR)/build/outputs.py', - '<(CLOSURE_DIR)/compiler/compiler.jar', '>@(_sources)', ],
diff --git a/third_party/gvr-android-sdk/test-apks/daydream_home/apk_version_history.txt b/third_party/gvr-android-sdk/test-apks/daydream_home/apk_version_history.txt index 766f38aa..243c4db 100644 --- a/third_party/gvr-android-sdk/test-apks/daydream_home/apk_version_history.txt +++ b/third_party/gvr-android-sdk/test-apks/daydream_home/apk_version_history.txt
@@ -2,3 +2,4 @@ v1.0 2737c1d56854a2eb15df3c28697fa5267af5c558 v1.1 12e7c98d6db3ab31a6f9c7e6f07351a9e4b85565 v1.2 5400db0e25a24e0df9635ab268ef1058a60dfec2 +v1.3 db5eaf6e83a10e809b96375212d5c9dbbe517624
diff --git a/third_party/gvr-android-sdk/test-apks/daydream_home/daydream_home_current.apk.sha1 b/third_party/gvr-android-sdk/test-apks/daydream_home/daydream_home_current.apk.sha1 index 3c783e34..0eacbb3 100644 --- a/third_party/gvr-android-sdk/test-apks/daydream_home/daydream_home_current.apk.sha1 +++ b/third_party/gvr-android-sdk/test-apks/daydream_home/daydream_home_current.apk.sha1
@@ -1 +1 @@ -5400db0e25a24e0df9635ab268ef1058a60dfec2 \ No newline at end of file +db5eaf6e83a10e809b96375212d5c9dbbe517624 \ No newline at end of file
diff --git a/third_party/gvr-android-sdk/test-apks/vr_services/apk_version_history.txt b/third_party/gvr-android-sdk/test-apks/vr_services/apk_version_history.txt index e43ab4a..25cb6ee 100644 --- a/third_party/gvr-android-sdk/test-apks/vr_services/apk_version_history.txt +++ b/third_party/gvr-android-sdk/test-apks/vr_services/apk_version_history.txt
@@ -2,3 +2,4 @@ v1.0 33e2c2bb1045fa1e0c3816fd6e8fb0ce6cbd56d4 v1.1 524b48921472c133183d68a78a8dc675ea4cad35 v1.2 982709c5cc24922c381413fa32b9cb8e9f004165 +v1.3 8233707ffc519460e1d21f8e1a5364a6336227f2
diff --git a/third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk.sha1 b/third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk.sha1 index 78ec272..de56928 100644 --- a/third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk.sha1 +++ b/third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk.sha1
@@ -1 +1 @@ -982709c5cc24922c381413fa32b9cb8e9f004165 \ No newline at end of file +8233707ffc519460e1d21f8e1a5364a6336227f2 \ No newline at end of file
diff --git a/tools/chrome_proxy/webdriver/bypass.py b/tools/chrome_proxy/webdriver/bypass.py index 6000687..d5774dd6 100644 --- a/tools/chrome_proxy/webdriver/bypass.py +++ b/tools/chrome_proxy/webdriver/bypass.py
@@ -135,6 +135,39 @@ self.assertEqual(1, histogram['count']) self.assertIn({'count': 1, 'high': 5, 'low': 4}, histogram['buckets']) + # Verify that the Data Reduction Proxy understands the "exp" directive. + def testExpDirectiveBypass(self): + with TestDriver() as test_driver: + test_driver.AddChromeArg('--enable-spdy-proxy-auth') + test_driver.AddChromeArg('--data-reduction-proxy-experiment=test') + + # Verify that loading a page other than the specific exp directive test + # page loads through the proxy without being bypassed. + test_driver.LoadURL('http://check.googlezip.net/test.html') + responses = test_driver.GetHTTPResponses() + self.assertNotEqual(0, len(responses)) + for response in responses: + self.assertHasChromeProxyViaHeader(response) + + # Verify that loading the exp directive test page with "exp=test" triggers + # a bypass. + test_driver.LoadURL('http://check.googlezip.net/exp/') + responses = test_driver.GetHTTPResponses() + self.assertNotEqual(0, len(responses)) + for response in responses: + self.assertNotHasChromeProxyViaHeader(response) + + # Verify that loading the same test page without setting "exp=test" loads + # through the proxy without being bypassed. + with TestDriver() as test_driver: + test_driver.AddChromeArg('--enable-spdy-proxy-auth') + + test_driver.LoadURL('http://check.googlezip.net/exp/') + responses = test_driver.GetHTTPResponses() + self.assertNotEqual(0, len(responses)) + for response in responses: + self.assertHasChromeProxyViaHeader(response) + if __name__ == '__main__': IntegrationTest.RunAllTests()
diff --git a/tools/gn/command_help.cc b/tools/gn/command_help.cc index 62ce6d3e..2d859b1 100644 --- a/tools/gn/command_help.cc +++ b/tools/gn/command_help.cc
@@ -29,39 +29,37 @@ namespace { void PrintToplevelHelp() { - OutputString("Commands (type \"gn help <command>\" for more details):\n"); + PrintSectionHelp("Commands", "<command>", "commands"); for (const auto& cmd : commands::GetCommands()) PrintShortHelp(cmd.second.help_short); // Target declarations. - OutputString("\nTarget declarations (type \"gn help <function>\" for more " - "details):\n"); + PrintSectionHelp("Target declarations", "<function>", "targets"); for (const auto& func : functions::GetFunctions()) { if (func.second.is_target) PrintShortHelp(func.second.help_short); } // Functions. - OutputString("\nBuildfile functions (type \"gn help <function>\" for more " - "details):\n"); + PrintSectionHelp("Buildfile functions", "<function>", "functions"); for (const auto& func : functions::GetFunctions()) { if (!func.second.is_target) PrintShortHelp(func.second.help_short); } // Built-in variables. - OutputString("\nBuilt-in predefined variables (type \"gn help <variable>\" " - "for more details):\n"); + PrintSectionHelp("Built-in predefined variables", "<variable>", + "predefined_variables"); for (const auto& builtin : variables::GetBuiltinVariables()) PrintShortHelp(builtin.second.help_short); // Target variables. - OutputString("\nVariables you set in targets (type \"gn help <variable>\" " - "for more details):\n"); + PrintSectionHelp("Variables you set in targets", "<variable>", + "target_variables"); for (const auto& target : variables::GetTargetVariables()) PrintShortHelp(target.second.help_short); - OutputString("\nOther help topics:\n"); + PrintSectionHelp("Other help topics", "", "other"); PrintShortHelp("all: Print all the help at once"); PrintShortHelp("buildargs: How build arguments work."); PrintShortHelp("dotfile: Info about the toplevel .gn file."); @@ -80,7 +78,7 @@ void PrintSwitchHelp() { const base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess(); - bool use_markdown = cmdline->HasSwitch(switches::kMarkdown); + bool is_markdown = cmdline->HasSwitch(switches::kMarkdown); OutputString("Available global switches\n", DECORATION_YELLOW); OutputString( @@ -88,57 +86,87 @@ " commands may take command-specific switches not listed here. See the\n" " help on your specific command for more.\n\n"); - if (use_markdown) + if (is_markdown) OutputString("```\n\n", DECORATION_NONE); for (const auto& s : switches::GetSwitches()) PrintShortHelp(s.second.short_help); - if (use_markdown) + if (is_markdown) OutputString("\n```\n", DECORATION_NONE); + + OutputString("\n"); } void PrintAllHelp() { const base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess(); - if (cmdline->HasSwitch(switches::kMarkdown)) { - OutputString("# GN Reference\n\n"); + bool is_markdown = cmdline->HasSwitch(switches::kMarkdown); - // TODO: https://code.google.com/p/gitiles/issues/detail?id=75 - // Gitiles crashes when rendering the table of contents, so we must omit - // it until the bug is fixed. - // OutputString("[TOC]\n\n"); + if (is_markdown) { + OutputString("# GN Reference\n\n"); OutputString("*This page is automatically generated from* " "`gn help --markdown all`.\n\n"); - } else { - PrintToplevelHelp(); + + // Generate our own table of contents so that we have more control + // over what's in and out. + OutputString("## Contents\n\n"); } - for (const auto& s : switches::GetSwitches()) - PrintLongHelp(s.second.long_help); + PrintToplevelHelp(); + OutputString("\n"); + + if (is_markdown) + OutputString("## <a name=\"commands\"></a>Commands\n\n"); for (const auto& c: commands::GetCommands()) PrintLongHelp(c.second.help); - for (const auto& f: functions::GetFunctions()) - PrintLongHelp(f.second.help); + if (is_markdown) + OutputString("## <a name=\"targets\"></a>Target declarations\n\n"); + for (const auto& f : functions::GetFunctions()) { + if (f.second.is_target) + PrintLongHelp(f.second.help); + } + if (is_markdown) + OutputString("## <a name=\"functions\"></a>Buildfile functions\n\n"); + for (const auto& f : functions::GetFunctions()) { + if (!f.second.is_target) + PrintLongHelp(f.second.help); + } + + if (is_markdown) { + OutputString( + "## <a name=\"predefined_variables\"></a>" + "Built-in predefined variables\n\n"); + } for (const auto& v: variables::GetBuiltinVariables()) PrintLongHelp(v.second.help); + if (is_markdown) { + OutputString( + "## <a name=\"target_variables\"></a>" + "Variables you set in targets\n\n"); + } for (const auto& v: variables::GetTargetVariables()) PrintLongHelp(v.second.help); - PrintLongHelp(kBuildArgs_Help); - PrintLongHelp(kDotfile_Help); - PrintLongHelp(kExecution_Help); - PrintLongHelp(kGrammar_Help); - PrintLongHelp(kInputConversion_Help); - PrintLongHelp(kLabelPattern_Help); - PrintLongHelp(kLabels_Help); - PrintLongHelp(kNinjaRules_Help); - PrintLongHelp(kNoGnCheck_Help); - PrintLongHelp(kRuntimeDeps_Help); - PrintLongHelp(kSourceExpansion_Help); + if (is_markdown) + OutputString("## <a name=\"other\"></a>Other help topics\n\n"); + PrintLongHelp(kBuildArgs_Help, "buildargs"); + PrintLongHelp(kDotfile_Help, "dotfile"); + PrintLongHelp(kExecution_Help, "execution"); + PrintLongHelp(kGrammar_Help, "grammar"); + PrintLongHelp(kInputConversion_Help, "input_conversion"); + PrintLongHelp(kLabelPattern_Help, "label_pattern"); + PrintLongHelp(kLabels_Help, "labels"); + PrintLongHelp(kNinjaRules_Help, "ninja_rules"); + PrintLongHelp(kNoGnCheck_Help, "nogncheck"); + PrintLongHelp(kRuntimeDeps_Help, "runtime_deps"); + PrintLongHelp(kSourceExpansion_Help, "source_expansion"); + + if (is_markdown) + OutputString("## <a name=\"switches\"></a>Command Line Switches\n\n"); PrintSwitchHelp(); }
diff --git a/tools/gn/docs/reference.md b/tools/gn/docs/reference.md index db5c341..3929fc434 100644 --- a/tools/gn/docs/reference.md +++ b/tools/gn/docs/reference.md
@@ -2,249 +2,147 @@ *This page is automatically generated from* `gn help --markdown all`. -## **\--args**: Specifies build arguments overrides. +## Contents -``` - See "gn help buildargs" for an overview of how build arguments work. +* [Commands](#commands) + * [analyze: Analyze which targets are affected by a list of files.](#analyze) + * [args: Display or configure arguments declared by the build.](#args) + * [check: Check header dependencies.](#check) + * [clean: Cleans the output directory.](#clean) + * [desc: Show lots of insightful information about a target or config.](#desc) + * [format: Format .gn file.](#format) + * [gen: Generate ninja files.](#gen) + * [help: Does what you think.](#help) + * [ls: List matching targets.](#ls) + * [path: Find paths between two targets.](#path) + * [refs: Find stuff referencing a target or file.](#refs) +* [Target declarations](#targets) + * [action: Declare a target that runs a script a single time.](#action) + * [action_foreach: Declare a target that runs a script over a set of files.](#action_foreach) + * [bundle_data: [iOS/OS X] Declare a target without output.](#bundle_data) + * [copy: Declare a target that copies files.](#copy) + * [create_bundle: [iOS/OS X] Build an OS X / iOS bundle.](#create_bundle) + * [executable: Declare an executable target.](#executable) + * [group: Declare a named group of targets.](#group) + * [loadable_module: Declare a loadable module target.](#loadable_module) + * [shared_library: Declare a shared library target.](#shared_library) + * [source_set: Declare a source set target.](#source_set) + * [static_library: Declare a static library target.](#static_library) + * [target: Declare an target with the given programmatic type.](#target) +* [Buildfile functions](#functions) + * [assert: Assert an expression is true at generation time.](#assert) + * [config: Defines a configuration object.](#config) + * [declare_args: Declare build arguments.](#declare_args) + * [defined: Returns whether an identifier is defined.](#defined) + * [exec_script: Synchronously run a script and return the output.](#exec_script) + * [foreach: Iterate over a list.](#foreach) + * [forward_variables_from: Copies variables from a different scope.](#forward_variables_from) + * [get_label_info: Get an attribute from a target's label.](#get_label_info) + * [get_path_info: Extract parts of a file or directory name.](#get_path_info) + * [get_target_outputs: [file list] Get the list of outputs from a target.](#get_target_outputs) + * [getenv: Get an environment variable.](#getenv) + * [import: Import a file into the current scope.](#import) + * [pool: Defines a pool object.](#pool) + * [print: Prints to the console.](#print) + * [process_file_template: Do template expansion over a list of files.](#process_file_template) + * [read_file: Read a file into a variable.](#read_file) + * [rebase_path: Rebase a file or directory to another location.](#rebase_path) + * [set_default_toolchain: Sets the default toolchain name.](#set_default_toolchain) + * [set_defaults: Set default values for a target type.](#set_defaults) + * [set_sources_assignment_filter: Set a pattern to filter source files.](#set_sources_assignment_filter) + * [split_list: Splits a list into N different sub-lists.](#split_list) + * [template: Define a template rule.](#template) + * [tool: Specify arguments to a toolchain tool.](#tool) + * [toolchain: Defines a toolchain.](#toolchain) + * [write_file: Write a file to disk.](#write_file) +* [Built-in predefined variables](#predefined_variables) + * [current_cpu: [string] The processor architecture of the current toolchain.](#current_cpu) + * [current_os: [string] The operating system of the current toolchain.](#current_os) + * [current_toolchain: [string] Label of the current toolchain.](#current_toolchain) + * [default_toolchain: [string] Label of the default toolchain.](#default_toolchain) + * [host_cpu: [string] The processor architecture that GN is running on.](#host_cpu) + * [host_os: [string] The operating system that GN is running on.](#host_os) + * [invoker: [string] The invoking scope inside a template.](#invoker) + * [python_path: [string] Absolute path of Python.](#python_path) + * [root_build_dir: [string] Directory where build commands are run.](#root_build_dir) + * [root_gen_dir: [string] Directory for the toolchain's generated files.](#root_gen_dir) + * [root_out_dir: [string] Root directory for toolchain output files.](#root_out_dir) + * [target_cpu: [string] The desired cpu architecture for the build.](#target_cpu) + * [target_gen_dir: [string] Directory for a target's generated files.](#target_gen_dir) + * [target_name: [string] The name of the current target.](#target_name) + * [target_os: [string] The desired operating system for the build.](#target_os) + * [target_out_dir: [string] Directory for target output files.](#target_out_dir) +* [Variables you set in targets](#target_variables) + * [all_dependent_configs: [label list] Configs to be forced on dependents.](#all_dependent_configs) + * [allow_circular_includes_from: [label list] Permit includes from deps.](#allow_circular_includes_from) + * [arflags: [string list] Arguments passed to static_library archiver.](#arflags) + * [args: [string list] Arguments passed to an action.](#args) + * [asmflags: [string list] Flags passed to the assembler.](#asmflags) + * [assert_no_deps: [label pattern list] Ensure no deps on these targets.](#assert_no_deps) + * [bundle_deps_filter: [label list] A list of labels that are filtered out.](#bundle_deps_filter) + * [bundle_executable_dir: Expansion of {{bundle_executable_dir}} in create_bundle](#bundle_executable_dir) + * [bundle_plugins_dir: Expansion of {{bundle_plugins_dir}} in create_bundle.](#bundle_plugins_dir) + * [bundle_resources_dir: Expansion of {{bundle_resources_dir}} in create_bundle.](#bundle_resources_dir) + * [bundle_root_dir: Expansion of {{bundle_root_dir}} in create_bundle.](#bundle_root_dir) + * [cflags: [string list] Flags passed to all C compiler variants.](#cflags) + * [cflags_c: [string list] Flags passed to the C compiler.](#cflags_c) + * [cflags_cc: [string list] Flags passed to the C++ compiler.](#cflags_cc) + * [cflags_objc: [string list] Flags passed to the Objective C compiler.](#cflags_objc) + * [cflags_objcc: [string list] Flags passed to the Objective C++ compiler.](#cflags_objcc) + * [check_includes: [boolean] Controls whether a target's files are checked.](#check_includes) + * [code_signing_args: [string list] Arguments passed to code signing script.](#code_signing_args) + * [code_signing_outputs: [file list] Output files for code signing step.](#code_signing_outputs) + * [code_signing_script: [file name] Script for code signing.](#code_signing_script) + * [code_signing_sources: [file list] Sources for code signing step.](#code_signing_sources) + * [complete_static_lib: [boolean] Links all deps into a static library.](#complete_static_lib) + * [configs: [label list] Configs applying to this target or config.](#configs) + * [console: [boolean] Run this action in the console pool.](#console) + * [data: [file list] Runtime data file dependencies.](#data) + * [data_deps: [label list] Non-linked dependencies.](#data_deps) + * [defines: [string list] C preprocessor defines.](#defines) + * [depfile: [string] File name for input dependencies for actions.](#depfile) + * [deps: [label list] Private linked dependencies.](#deps) + * [include_dirs: [directory list] Additional include directories.](#include_dirs) + * [inputs: [file list] Additional compile-time dependencies.](#inputs) + * [ldflags: [string list] Flags passed to the linker.](#ldflags) + * [lib_dirs: [directory list] Additional library directories.](#lib_dirs) + * [libs: [string list] Additional libraries to link.](#libs) + * [output_dir: [directory] Directory to put output file in.](#output_dir) + * [output_extension: [string] Value to use for the output's file extension.](#output_extension) + * [output_name: [string] Name for the output file other than the default.](#output_name) + * [output_prefix_override: [boolean] Don't use prefix for output name.](#output_prefix_override) + * [outputs: [file list] Output files for actions and copy targets.](#outputs) + * [precompiled_header: [string] Header file to precompile.](#precompiled_header) + * [precompiled_header_type: [string] "gcc" or "msvc".](#precompiled_header_type) + * [precompiled_source: [file name] Source file to precompile.](#precompiled_source) + * [product_type: [string] Product type for Xcode projects.](#product_type) + * [public: [file list] Declare public header files for a target.](#public) + * [public_configs: [label list] Configs applied to dependents.](#public_configs) + * [public_deps: [label list] Declare public dependencies.](#public_deps) + * [response_file_contents: [string list] Contents of .rsp file for actions.](#response_file_contents) + * [script: [file name] Script file for actions.](#script) + * [sources: [file list] Source files for a target.](#sources) + * [testonly: [boolean] Declares a target must only be used for testing.](#testonly) + * [visibility: [label list] A list of labels that can depend on a target.](#visibility) + * [write_runtime_deps: Writes the target's runtime_deps to the given path.](#write_runtime_deps) +* [Other help topics](#other) + * [all: Print all the help at once](#all) + * [buildargs: How build arguments work.](#buildargs) + * [dotfile: Info about the toplevel .gn file.](#dotfile) + * [execution: Build graph and execution overview.](#execution) + * [grammar: Language and grammar for GN build files.](#grammar) + * [input_conversion: Processing input from exec_script and read_file.](#input_conversion) + * [label_pattern: Matching more than one label.](#label_pattern) + * [labels: About labels.](#labels) + * [ninja_rules: How Ninja build rules are named.](#ninja_rules) + * [nogncheck: Annotating includes for checking.](#nogncheck) + * [runtime_deps: How runtime dependency computation works.](#runtime_deps) + * [source_expansion: Map sources to outputs for scripts.](#source_expansion) + * [switches: Show available command-line switches.](#switches) - Most operations take a build directory. The build arguments are taken from - the previous build done in that directory. If a command specifies --args, it - will override the previous arguments stored in the build directory, and use - the specified ones. +## <a name="commands"></a>Commands - The args specified will be saved to the build directory for subsequent - commands. Specifying --args="" will clear all build arguments. - -``` - -### **Formatting** - -``` - The value of the switch is interpreted in GN syntax. For typical usage of - string arguments, you will need to be careful about escaping of quotes. - -``` - -### **Examples** - -``` - gn gen out/Default --args="foo=\"bar\"" - - gn gen out/Default --args='foo="bar" enable=true blah=7' - - gn check out/Default --args="" - Clears existing build args from the directory. - - gn desc out/Default --args="some_list=[1, false, \"foo\"]" - - -``` -## **\--[no]color**: Forces colored output on or off. - -``` - Normally GN will try to detect whether it is outputting to a terminal - and will enable or disable color accordingly. Use of these switches - will override the default. - -``` - -### **Examples** - -``` - gn gen out/Default --color - - gn gen out/Default --nocolor - - -``` -## **\--dotfile**: Override the name of the ".gn" file. - -``` - Normally GN loads the ".gn"file from the source root for some basic - configuration (see "gn help dotfile"). This flag allows you to - use a different file. - - Note that this interacts with "--root" in a possibly incorrect way. - It would be nice to test the edge cases and document or fix. - - -``` -## **\--fail-on-unused-args**: Treat unused build args as fatal errors. - -``` - If you set a value in a build's "gn args" and never use it in the build (in - a declare_args() block), GN will normally print an error but not fail the - build. - - In many cases engineers would use build args to enable or disable features - that would sometimes get removed. It would by annoying to block work for - typically benign problems. In Chrome in particular, flags might be configured - for build bots in a separate infrastructure repository, or a declare_args - block might be changed in a third party repository. Treating these errors as - blocking forced complex multi- way patches to land what would otherwise be - simple changes. - - In some cases, such concerns are not as important, and a mismatch in build - flags between the invoker of the build and the build files represents a - critical mismatch that should be immediately fixed. Such users can set this - flag to force GN to fail in that case. - - -``` -## **\--markdown**: Write help output in the Markdown format. - -## **\--[no]color**: Forces colored output on or off. - -``` - Normally GN will try to detect whether it is outputting to a terminal - and will enable or disable color accordingly. Use of these switches - will override the default. - -``` - -### **Examples** - -``` - gn gen out/Default --color - - gn gen out/Default --nocolor - - -``` -## **-q**: Quiet mode. Don't print output on success. - -``` - This is useful when running as a part of another script. - - -``` -## **\--root**: Explicitly specify source root. - -``` - Normally GN will look up in the directory tree from the current directory to - find a ".gn" file. The source root directory specifies the meaning of "//" - beginning with paths, and the BUILD.gn file in that directory will be the - first thing loaded. - - Specifying --root allows GN to do builds in a specific directory regardless - of the current directory. - -``` - -### **Examples** - -``` - gn gen //out/Default --root=/home/baracko/src - - gn desc //out/Default --root="C:\Users\BObama\My Documents\foo" - - -``` -## **\--runtime-deps-list-file**: Save runtime dependencies for targets in file. - -``` - --runtime-deps-list-file=<filename> - - Where <filename> is a text file consisting of the labels, one per line, of - the targets for which runtime dependencies are desired. - - See "gn help runtime_deps" for a description of how runtime dependencies are - computed. - -``` - -### **Runtime deps output file** - -``` - For each target requested, GN will write a separate runtime dependency file. - The runtime dependency file will be in the output directory alongside the - output file of the target, with a ".runtime_deps" extension. For example, if - the target "//foo:bar" is listed in the input file, and that target produces - an output file "bar.so", GN will create a file "bar.so.runtime_deps" in the - build directory. - - If a source set, action, copy, or group is listed, the runtime deps file will - correspond to the .stamp file corresponding to that target. This is probably - not useful; the use-case for this feature is generally executable targets. - - The runtime dependency file will list one file per line, with no escaping. - The files will be relative to the root_build_dir. The first line of the file - will be the main output file of the target itself (in the above example, - "bar.so"). - - -``` -## **\--script-executable**: Set the executable used to execute scripts. - -``` - By default GN searches the PATH for Python to execute scripts in action - targets and exec_script calls. This flag allows the specification of a - specific Python executable or potentially a different language - interpreter. - - -``` -## **\--threads**: Specify number of worker threads. - -``` - GN runs many threads to load and run build files. This can make debugging - challenging. Or you may want to experiment with different values to see how - it affects performance. - - The parameter is the number of worker threads. This does not count the main - thread (so there are always at least two). - -``` - -### **Examples** - -``` - gen gen out/Default --threads=1 - - -``` -## **\--time**: Outputs a summary of how long everything took. - -``` - Hopefully self-explanatory. - -``` - -### **Examples** - -``` - gn gen out/Default --time - - -``` -## **\--tracelog**: Writes a Chrome-compatible trace log to the given file. - -``` - The trace log will show file loads, executions, scripts, and writes. This - allows performance analysis of the generation step. - - To view the trace, open Chrome and navigate to "chrome://tracing/", then - press "Load" and specify the file you passed to this parameter. - -``` - -### **Examples** - -``` - gn gen out/Default --tracelog=mytrace.trace - - -``` -## **-v**: Verbose logging. - -``` - This will spew logging events to the console for debugging issues. - - Good luck! - - -``` -## **gn analyze <out_dir> <input_path> <output_path>** +### <a name="analyze"></a>**gn analyze <out_dir> <input_path> <output_path>** ``` Analyze which targets are affected by a list of files. @@ -316,7 +214,7 @@ ``` -## **gn args <out_dir> [\--list] [\--short] [\--args]** +### <a name="args"></a>**gn args <out_dir> [\--list] [\--short] [\--args]** ``` See also "gn help buildargs" for a more high-level overview of how @@ -324,7 +222,7 @@ ``` -### **Usage** +#### **Usage** ``` gn args <out_dir> @@ -356,7 +254,7 @@ ``` -### **Examples** +#### **Examples** ``` gn args out/Debug @@ -378,7 +276,7 @@ ``` -## **gn check <out_dir> [<label_pattern>] [\--force]** +### <a name="check"></a>**gn check <out_dir> [<label_pattern>] [\--force]** ``` GN's include header checker validates that the includes for C-like source @@ -394,7 +292,7 @@ ``` -### **Command-specific switches** +#### **Command-specific switches** ``` --force @@ -403,7 +301,7 @@ ``` -### **What gets checked** +#### **What gets checked** ``` The .gn file may specify a list of targets to be checked. Only these targets @@ -459,7 +357,7 @@ ``` -### **Advice on fixing problems** +#### **Advice on fixing problems** ``` If you have a third party project that uses relative includes, it's generally @@ -487,7 +385,7 @@ ``` -### **Examples** +#### **Examples** ``` gn check out/Debug @@ -501,7 +399,7 @@ ``` -## **gn clean <out_dir>** +### <a name="clean"></a>**gn clean <out_dir>** ``` Deletes the contents of the output directory except for args.gn and @@ -509,8 +407,8 @@ ``` -## **gn desc <out_dir> <label or pattern> [<what to show>] [\--blame] "** -### **[\--format=json]** +### <a name="desc"></a>**gn desc <out_dir> <label or pattern> [<what to show>] [\--blame] "** +#### **[\--format=json]** ``` Displays information about a given target or config. The build build @@ -522,7 +420,7 @@ ``` -### **Possibilities for <what to show>** +#### **Possibilities for <what to show>** ``` (If unspecified an overall summary will be displayed.) @@ -563,7 +461,7 @@ ``` -### **Shared flags** +#### **Shared flags** ``` --all-toolchains Normally only inputs in the default toolchain will be included. @@ -579,7 +477,7 @@ ``` -### **Target flags** +#### **Target flags** ``` --blame @@ -590,7 +488,7 @@ ``` -### **Configs** +#### **Configs** ``` The "configs" section will list all configs that apply. For targets this will @@ -601,7 +499,7 @@ ``` -### **Printing outputs** +#### **Printing outputs** ``` The "outputs" section will list all outputs that apply, including the outputs @@ -610,7 +508,7 @@ ``` -### **Printing deps** +#### **Printing deps** ``` Deps will include all public, private, and data deps (TODO this could be @@ -651,7 +549,7 @@ unspecified, no filtering will be performed. ``` -### **Note** +#### **Note** ``` This command will show the full name of directories and source files, but @@ -661,7 +559,7 @@ ``` -### **Examples** +#### **Examples** ``` gn desc out/Debug //base:base @@ -677,7 +575,7 @@ ``` -## **gn format [\--dump-tree] (\--stdin | <build_file>)** +### <a name="format"></a>**gn format [\--dump-tree] (\--stdin | <build_file>)** ``` Formats .gn file to a standard format. @@ -694,7 +592,7 @@ ``` -### **Arguments** +#### **Arguments** ``` --dry-run @@ -715,7 +613,7 @@ ``` -### **Examples** +#### **Examples** ``` gn format //some/BUILD.gn gn format some\\BUILD.gn @@ -724,7 +622,7 @@ ``` -## **gn gen**: Generate ninja files. +### <a name="gen:"></a>**gn gen**: Generate ninja files. ``` gn gen [<ide options>] <out_dir> @@ -741,7 +639,7 @@ ``` -### **IDE options** +#### **IDE options** ``` GN optionally generates files for IDE. Possibilities for <ide options> @@ -753,6 +651,7 @@ (default Visual Studio version: 2015) "vs2013" - Visual Studio 2013 project/solution files. "vs2015" - Visual Studio 2015 project/solution files. + "vs2017" - Visual Studio 2017 project/solution files. "xcode" - Xcode workspace/solution files. "qtcreator" - QtCreator project files. "json" - JSON file containing target information @@ -765,7 +664,7 @@ ``` -### **Visual Studio Flags** +#### **Visual Studio Flags** ``` --sln=<file_name> @@ -778,7 +677,7 @@ ``` -### **Xcode Flags** +#### **Xcode Flags** ``` --workspace=<file_name> @@ -796,7 +695,7 @@ ``` -### **QtCreator Flags** +#### **QtCreator Flags** ``` --root-target=<target_name> @@ -807,7 +706,7 @@ ``` -### **Eclipse IDE Support** +#### **Eclipse IDE Support** ``` GN DOES NOT generate Eclipse CDT projects. Instead, it generates a settings @@ -820,7 +719,7 @@ ``` -### **Generic JSON Output** +#### **Generic JSON Output** ``` Dumps target information to JSON file and optionally invokes python script on @@ -841,7 +740,7 @@ ``` -## **gn help <anything>** +### <a name="help"></a>**gn help <anything>** ``` Yo dawg, I heard you like help on your help so I put help on the help in the @@ -851,7 +750,7 @@ ``` -### **Switches** +#### **Switches** ``` --markdown @@ -859,7 +758,7 @@ ``` -### **Example** +#### **Example** ``` gn help --markdown all @@ -867,7 +766,7 @@ ``` -## **gn ls <out_dir> [<label_pattern>] [\--all-toolchains] [\--as=...]** +### <a name="ls"></a>**gn ls <out_dir> [<label_pattern>] [\--all-toolchains] [\--as=...]** ``` [--type=...] [--testonly=...] @@ -881,7 +780,7 @@ ``` -### **Options** +#### **Options** ``` --as=(buildfile|label|output) @@ -917,7 +816,7 @@ ``` -### **Examples** +#### **Examples** ``` gn ls out/Debug @@ -944,7 +843,7 @@ ``` -## **gn path <out_dir> <target_one> <target_two>** +### <a name="path"></a>**gn path <out_dir> <target_one> <target_two>** ``` Finds paths of dependencies between two targets. Each unique path will be @@ -960,7 +859,7 @@ ``` -### **Interesting paths** +#### **Interesting paths** ``` In a large project, there can be 100's of millions of unique paths between a @@ -970,7 +869,7 @@ ``` -### **Options** +#### **Options** ``` --all @@ -987,14 +886,14 @@ ``` -### **Example** +#### **Example** ``` gn path out/Default //base //tools/gn ``` -## **gn refs <out_dir> (<label_pattern>|<label>|<file>|@<response_file>)*** +### <a name="refs"></a>**gn refs <out_dir> (<label_pattern>|<label>|<file>|@<response_file>)*** ``` [--all] [--all-toolchains] [--as=...] [--testonly=...] [--type=...] @@ -1022,7 +921,7 @@ ``` -### **Options** +#### **Options** ``` --all @@ -1077,7 +976,7 @@ ``` -### **Examples (target input)** +#### **Examples (target input)** ``` gn refs out/Debug //tools/gn:gn @@ -1102,7 +1001,7 @@ ``` -### **Examples (file input)** +#### **Examples (file input)** ``` gn refs out/Debug //base/macros.h @@ -1123,7 +1022,9 @@ ``` -## **action**: Declare a target that runs a script a single time. +## <a name="targets"></a>Target declarations + +### <a name="action"></a>**action**: Declare a target that runs a script a single time. ``` This target type allows you to run a script a single time to produce one or @@ -1132,7 +1033,7 @@ ``` -### **Inputs** +#### **Inputs** ``` In an action the "sources" and "inputs" are treated the same: they're both @@ -1162,7 +1063,7 @@ ``` -### **Outputs** +#### **Outputs** ``` You should specify files created by your script by specifying them in the @@ -1176,7 +1077,7 @@ ``` -### **File name handling** +#### **File name handling** ``` All output files must be inside the output directory of the build. You would generally use |$target_out_dir| or |$target_gen_dir| to @@ -1185,7 +1086,7 @@ ``` -### **Variables** +#### **Variables** ``` args, console, data, data_deps, depfile, deps, inputs, outputs*, @@ -1194,7 +1095,7 @@ ``` -### **Example** +#### **Example** ``` action("run_this_guy_once") { @@ -1213,7 +1114,7 @@ ``` -## **action_foreach**: Declare a target that runs a script over a set of files. +### <a name="action_foreach"></a>**action_foreach**: Declare a target that runs a script over a set of files. ``` This target type allows you to run a script once-per-file over a set of @@ -1222,7 +1123,7 @@ ``` -### **Inputs** +#### **Inputs** ``` The script will be run once per file in the "sources" variable. The "outputs" @@ -1250,7 +1151,7 @@ ``` -### **Outputs** +#### **Outputs** ``` The script will be executed with the given arguments with the current directory being that of the root build directory. If you pass files @@ -1261,7 +1162,7 @@ ``` -### **File name handling** +#### **File name handling** ``` All output files must be inside the output directory of the build. You would generally use |$target_out_dir| or |$target_gen_dir| to @@ -1270,7 +1171,7 @@ ``` -### **Variables** +#### **Variables** ``` args, console, data, data_deps, depfile, deps, inputs, outputs*, @@ -1279,7 +1180,7 @@ ``` -### **Example** +#### **Example** ``` # Runs the script over each IDL file. The IDL script will generate both a .cc @@ -1308,26 +1209,7 @@ ``` -## **assert**: Assert an expression is true at generation time. - -``` - assert(<condition> [, <error string>]) - - If the condition is false, the build will fail with an error. If the - optional second argument is provided, that string will be printed - with the error message. - -``` - -### **Examples** - -``` - assert(is_win) - assert(defined(sources), "Sources must be defined"); - - -``` -## **bundle_data**: [iOS/OS X] Declare a target without output. +### <a name="bundle_data"></a>**bundle_data**: [iOS/OS X] Declare a target without output. ``` This target type allows to declare data that is required at runtime. It is @@ -1346,7 +1228,7 @@ ``` -### **Variables** +#### **Variables** ``` sources*, outputs*, deps, data_deps, public_deps, visibility @@ -1354,7 +1236,7 @@ ``` -### **Examples** +#### **Examples** ``` bundle_data("icudata") { @@ -1385,61 +1267,9 @@ ``` -## **config**: Defines a configuration object. +### <a name="copy"></a>**copy**: Declare a target that copies files. -``` - Configuration objects can be applied to targets and specify sets of compiler - flags, includes, defines, etc. They provide a way to conveniently group sets - of this configuration information. - - A config is referenced by its label just like a target. - - The values in a config are additive only. If you want to remove a flag you - need to remove the corresponding config that sets it. The final set of flags, - defines, etc. for a target is generated in this order: - - 1. The values specified directly on the target (rather than using a config. - 2. The configs specified in the target's "configs" list, in order. - 3. Public_configs from a breadth-first traversal of the dependency tree in - the order that the targets appear in "deps". - 4. All dependent configs from a breadth-first traversal of the dependency - tree in the order that the targets appear in "deps". - -``` - -### **Variables valid in a config definition** -``` - Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, - asmflags, defines, include_dirs, ldflags, lib_dirs, libs, - precompiled_header, precompiled_source - Nested configs: configs - -``` - -### **Variables on a target used to apply configs** - -``` - all_dependent_configs, configs, public_configs - -``` - -### **Example** - -``` - config("myconfig") { - includes = [ "include/common" ] - defines = [ "ENABLE_DOOM_MELON" ] - } - - executable("mything") { - configs = [ ":myconfig" ] - } - - -``` -## **copy**: Declare a target that copies files. - -### **File name handling** +#### **File name handling** ``` All output files must be inside the output directory of the build. You would @@ -1457,7 +1287,7 @@ ``` -### **Examples** +#### **Examples** ``` # Write a rule that copies a checked-in DLL to the output directory. @@ -1477,7 +1307,7 @@ ``` -## **create_bundle**: [iOS/OS X] Build an OS X / iOS bundle. +### <a name="create_bundle"></a>**create_bundle**: [iOS/OS X] Build an OS X / iOS bundle. ``` This target generates an iOS/OS X bundle (which is a directory with a @@ -1500,7 +1330,7 @@ ``` -### **Code signing** +#### **Code signing** ``` Some bundle needs to be code signed as part of the build (on iOS all @@ -1519,7 +1349,7 @@ ``` -### **Variables** +#### **Variables** ``` bundle_root_dir*, bundle_resources_dir*, bundle_executable_dir*, @@ -1530,7 +1360,7 @@ ``` -### **Example** +#### **Example** ``` # Defines a template to create an application. On most platform, this is just @@ -1625,7 +1455,273 @@ ``` -## **declare_args**: Declare build arguments. +### <a name="executable"></a>**executable**: Declare an executable target. + +#### **Variables** + +``` + Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, + asmflags, defines, include_dirs, ldflags, lib_dirs, libs, + precompiled_header, precompiled_source + Deps: data_deps, deps, public_deps + Dependent configs: all_dependent_configs, public_configs + General: check_includes, configs, data, inputs, output_name, + output_extension, public, sources, testonly, visibility + + +``` +### <a name="group"></a>**group**: Declare a named group of targets. + +``` + This target type allows you to create meta-targets that just collect a set of + dependencies into one named target. Groups can additionally specify configs + that apply to their dependents. + +``` + +#### **Variables** + +``` + Deps: data_deps, deps, public_deps + Dependent configs: all_dependent_configs, public_configs + +``` + +#### **Example** + +``` + group("all") { + deps = [ + "//project:runner", + "//project:unit_tests", + ] + } + + +``` +### <a name="loadable_module"></a>**loadable_module**: Declare a loadable module target. + +``` + This target type allows you to create an object file that is (and can only + be) loaded and unloaded at runtime. + + A loadable module will be specified on the linker line for targets listing + the loadable module in its "deps". If you don't want this (if you don't need + to dynamically load the library at runtime), then you should use a + "shared_library" target type instead. + +``` + +#### **Variables** + +``` + Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, + asmflags, defines, include_dirs, ldflags, lib_dirs, libs, + precompiled_header, precompiled_source + Deps: data_deps, deps, public_deps + Dependent configs: all_dependent_configs, public_configs + General: check_includes, configs, data, inputs, output_name, + output_extension, public, sources, testonly, visibility + + +``` +### <a name="shared_library"></a>**shared_library**: Declare a shared library target. + +``` + A shared library will be specified on the linker line for targets listing the + shared library in its "deps". If you don't want this (say you dynamically + load the library at runtime), then you should depend on the shared library + via "data_deps" or, on Darwin platforms, use a "loadable_module" target type + instead. + +``` + +#### **Variables** + +``` + Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, + asmflags, defines, include_dirs, ldflags, lib_dirs, libs, + precompiled_header, precompiled_source + Deps: data_deps, deps, public_deps + Dependent configs: all_dependent_configs, public_configs + General: check_includes, configs, data, inputs, output_name, + output_extension, public, sources, testonly, visibility + + +``` +### <a name="source_set"></a>**source_set**: Declare a source set target. + +``` + A source set is a collection of sources that get compiled, but are not linked + to produce any kind of library. Instead, the resulting object files are + implicitly added to the linker line of all targets that depend on the source + set. + + In most cases, a source set will behave like a static library, except no + actual library file will be produced. This will make the build go a little + faster by skipping creation of a large static library, while maintaining the + organizational benefits of focused build targets. + + The main difference between a source set and a static library is around + handling of exported symbols. Most linkers assume declaring a function + exported means exported from the static library. The linker can then do dead + code elimination to delete code not reachable from exported functions. + + A source set will not do this code elimination since there is no link step. + This allows you to link many sources sets into a shared library and have the + "exported symbol" notation indicate "export from the final shared library and + not from the intermediate targets." There is no way to express this concept + when linking multiple static libraries into a shared library. + +``` + +#### **Variables** + +``` + Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, + asmflags, defines, include_dirs, ldflags, lib_dirs, libs, + precompiled_header, precompiled_source + Deps: data_deps, deps, public_deps + Dependent configs: all_dependent_configs, public_configs + General: check_includes, configs, data, inputs, output_name, + output_extension, public, sources, testonly, visibility + + +``` +### <a name="static_library"></a>**static_library**: Declare a static library target. + +``` + Make a ".a" / ".lib" file. + + If you only need the static library for intermediate results in the build, + you should consider a source_set instead since it will skip the (potentially + slow) step of creating the intermediate library file. + +``` + +#### **Variables** + +``` + complete_static_lib + Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, + asmflags, defines, include_dirs, ldflags, lib_dirs, libs, + precompiled_header, precompiled_source + Deps: data_deps, deps, public_deps + Dependent configs: all_dependent_configs, public_configs + General: check_includes, configs, data, inputs, output_name, + output_extension, public, sources, testonly, visibility + + +``` +### <a name="target"></a>**target**: Declare an target with the given programmatic type. + +``` + target(target_type_string, target_name_string) { ... } + + The target() function is a way to invoke a built-in target or template with a + type determined at runtime. This is useful for cases where the type of a + target might not be known statically. + + Only templates and built-in target functions are supported for the + target_type_string parameter. Arbitrary functions, configs, and toolchains + are not supported. + + The call: + target("source_set", "doom_melon") { + Is equivalent to: + source_set("doom_melon") { + +``` + +#### **Example** + +``` + if (foo_build_as_shared) { + my_type = "shared_library" + } else { + my_type = "source_set" + } + + target(my_type, "foo") { + ... + } + + +``` +## <a name="functions"></a>Buildfile functions + +### <a name="assert"></a>**assert**: Assert an expression is true at generation time. + +``` + assert(<condition> [, <error string>]) + + If the condition is false, the build will fail with an error. If the + optional second argument is provided, that string will be printed + with the error message. + +``` + +#### **Examples** + +``` + assert(is_win) + assert(defined(sources), "Sources must be defined"); + + +``` +### <a name="config"></a>**config**: Defines a configuration object. + +``` + Configuration objects can be applied to targets and specify sets of compiler + flags, includes, defines, etc. They provide a way to conveniently group sets + of this configuration information. + + A config is referenced by its label just like a target. + + The values in a config are additive only. If you want to remove a flag you + need to remove the corresponding config that sets it. The final set of flags, + defines, etc. for a target is generated in this order: + + 1. The values specified directly on the target (rather than using a config. + 2. The configs specified in the target's "configs" list, in order. + 3. Public_configs from a breadth-first traversal of the dependency tree in + the order that the targets appear in "deps". + 4. All dependent configs from a breadth-first traversal of the dependency + tree in the order that the targets appear in "deps". + +``` + +#### **Variables valid in a config definition** +``` + Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, + asmflags, defines, include_dirs, ldflags, lib_dirs, libs, + precompiled_header, precompiled_source + Nested configs: configs + +``` + +#### **Variables on a target used to apply configs** + +``` + all_dependent_configs, configs, public_configs + +``` + +#### **Example** + +``` + config("myconfig") { + includes = [ "include/common" ] + defines = [ "ENABLE_DOOM_MELON" ] + } + + executable("mything") { + configs = [ ":myconfig" ] + } + + +``` +### <a name="declare_args"></a>**declare_args**: Declare build arguments. ``` Introduces the given arguments into the current scope. If they are not @@ -1673,7 +1769,7 @@ ``` -### **Example** +#### **Example** ``` declare_args() { @@ -1688,7 +1784,7 @@ ``` -## **defined**: Returns whether an identifier is defined. +### <a name="defined"></a>**defined**: Returns whether an identifier is defined. ``` Returns true if the given argument is defined. This is most useful in @@ -1707,7 +1803,7 @@ ``` -### **Example** +#### **Example** ``` template("mytemplate") { @@ -1725,7 +1821,7 @@ ``` -## **exec_script**: Synchronously run a script and return the output. +### <a name="exec_script"></a>**exec_script**: Synchronously run a script and return the output. ``` exec_script(filename, @@ -1744,7 +1840,7 @@ ``` -### **Arguments**: +#### **Arguments**: ``` filename: @@ -1772,7 +1868,7 @@ ``` -### **Example** +#### **Example** ``` all_lines = exec_script( @@ -1785,22 +1881,7 @@ ``` -## **executable**: Declare an executable target. - -### **Variables** - -``` - Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, - asmflags, defines, include_dirs, ldflags, lib_dirs, libs, - precompiled_header, precompiled_source - Deps: data_deps, deps, public_deps - Dependent configs: all_dependent_configs, public_configs - General: check_includes, configs, data, inputs, output_name, - output_extension, public, sources, testonly, visibility - - -``` -## **foreach**: Iterate over a list. +### <a name="foreach"></a>**foreach**: Iterate over a list. ``` foreach(<loop_var>, <list>) { @@ -1821,7 +1902,7 @@ ``` -### **Example** +#### **Example** ``` mylist = [ "a", "b", "c" ] @@ -1836,7 +1917,7 @@ ``` -## **forward_variables_from**: Copies variables from a different scope. +### <a name="forward_variables_from"></a>**forward_variables_from**: Copies variables from a different scope. ``` forward_variables_from(from_scope, variable_list_or_star, @@ -1872,7 +1953,7 @@ ``` -### **Examples** +#### **Examples** ``` # This is a common action template. It would invoke a script with some given @@ -1916,7 +1997,7 @@ ``` -## **get_label_info**: Get an attribute from a target's label. +### <a name="get_label_info"></a>**get_label_info**: Get an attribute from a target's label. ``` get_label_info(target_label, what) @@ -1929,7 +2010,7 @@ ``` -### **Possible values for the "what" parameter** +#### **Possible values for the "what" parameter** ``` "name" @@ -1973,7 +2054,7 @@ ``` -### **Examples** +#### **Examples** ``` get_label_info(":foo", "name") @@ -1984,7 +2065,7 @@ ``` -## **get_path_info**: Extract parts of a file or directory name. +### <a name="get_path_info"></a>**get_path_info**: Extract parts of a file or directory name. ``` get_path_info(input, what) @@ -1995,7 +2076,7 @@ ``` -### **Possible values for the "what" parameter** +#### **Possible values for the "what" parameter** ``` "file" @@ -2054,7 +2135,7 @@ ``` -### **Examples** +#### **Examples** ``` sources = [ "foo.cc", "foo.h" ] result = get_path_info(source, "abspath") @@ -2068,7 +2149,7 @@ ``` -## **get_target_outputs**: [file list] Get the list of outputs from a target. +### <a name="get_target_outputs"></a>**get_target_outputs**: [file list] Get the list of outputs from a target. ``` get_target_outputs(target_label) @@ -2086,7 +2167,7 @@ ``` -### **Return value** +#### **Return value** ``` The names in the resulting list will be absolute file paths (normally like @@ -2113,7 +2194,7 @@ ``` -### **Example** +#### **Example** ``` # Say this action generates a bunch of C source files. @@ -2129,7 +2210,7 @@ ``` -## **getenv**: Get an environment variable. +### <a name="getenv"></a>**getenv**: Get an environment variable. ``` value = getenv(env_var_name) @@ -2145,43 +2226,14 @@ ``` -### **Example** +#### **Example** ``` home_dir = getenv("HOME") ``` -## **group**: Declare a named group of targets. - -``` - This target type allows you to create meta-targets that just collect a set of - dependencies into one named target. Groups can additionally specify configs - that apply to their dependents. - -``` - -### **Variables** - -``` - Deps: data_deps, deps, public_deps - Dependent configs: all_dependent_configs, public_configs - -``` - -### **Example** - -``` - group("all") { - deps = [ - "//project:runner", - "//project:unit_tests", - ] - } - - -``` -## **import**: Import a file into the current scope. +### <a name="import"></a>**import**: Import a file into the current scope. ``` The import command loads the rules and variables resulting from executing the @@ -2209,7 +2261,7 @@ ``` -### **Examples** +#### **Examples** ``` import("//build/rules/idl_compilation_rule.gni") @@ -2219,33 +2271,7 @@ ``` -## **loadable_module**: Declare a loadable module target. - -``` - This target type allows you to create an object file that is (and can only - be) loaded and unloaded at runtime. - - A loadable module will be specified on the linker line for targets listing - the loadable module in its "deps". If you don't want this (if you don't need - to dynamically load the library at runtime), then you should use a - "shared_library" target type instead. - -``` - -### **Variables** - -``` - Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, - asmflags, defines, include_dirs, ldflags, lib_dirs, libs, - precompiled_header, precompiled_source - Deps: data_deps, deps, public_deps - Dependent configs: all_dependent_configs, public_configs - General: check_includes, configs, data, inputs, output_name, - output_extension, public, sources, testonly, visibility - - -``` -## **pool**: Defines a pool object. +### <a name="pool"></a>**pool**: Defines a pool object. ``` Pool objects can be applied to a tool to limit the parallelism of the @@ -2260,7 +2286,7 @@ ``` -### **Variables** +#### **Variables** ``` depth* @@ -2268,7 +2294,7 @@ ``` -### **Example** +#### **Example** ``` if (current_toolchain == default_toolchain) { @@ -2286,7 +2312,7 @@ ``` -## **print**: Prints to the console. +### <a name="print"></a>**print**: Prints to the console. ``` Prints all arguments to the console separated by spaces. A newline is @@ -2300,7 +2326,7 @@ ``` -### **Examples** +#### **Examples** ``` print("Hello world") @@ -2309,7 +2335,7 @@ ``` -## **process_file_template**: Do template expansion over a list of files. +### <a name="process_file_template"></a>**process_file_template**: Do template expansion over a list of files. ``` process_file_template(source_list, template) @@ -2325,7 +2351,7 @@ ``` -### **Arguments** +#### **Arguments** ``` The source_list is a list of file names. @@ -2338,7 +2364,7 @@ ``` -### **Example** +#### **Example** ``` sources = [ @@ -2358,7 +2384,7 @@ ``` -## **read_file**: Read a file into a variable. +### <a name="read_file"></a>**read_file**: Read a file into a variable. ``` read_file(filename, input_conversion) @@ -2368,7 +2394,7 @@ ``` -### **Arguments** +#### **Arguments** ``` filename @@ -2379,14 +2405,14 @@ ``` -### **Example** +#### **Example** ``` lines = read_file("foo.txt", "list lines") ``` -## **rebase_path**: Rebase a file or directory to another location. +### <a name="rebase_path"></a>**rebase_path**: Rebase a file or directory to another location. ``` converted = rebase_path(input, @@ -2414,7 +2440,7 @@ ``` -### **Arguments** +#### **Arguments** ``` input @@ -2439,7 +2465,7 @@ ``` -### **Return value** +#### **Return value** ``` The return value will be the same type as the input value (either a string or @@ -2455,7 +2481,7 @@ ``` -### **Example** +#### **Example** ``` # Convert a file in the current directory to be relative to the build @@ -2487,7 +2513,7 @@ ``` -## **set_default_toolchain**: Sets the default toolchain name. +### <a name="set_default_toolchain"></a>**set_default_toolchain**: Sets the default toolchain name. ``` set_default_toolchain(toolchain_label) @@ -2509,7 +2535,7 @@ ``` -### **Argument** +#### **Argument** ``` toolchain_label @@ -2517,7 +2543,7 @@ ``` -### **Example** +#### **Example** ``` # Set default toolchain only has an effect when run in the context of the @@ -2531,7 +2557,7 @@ ``` -## **set_defaults**: Set default values for a target type. +### <a name="set_defaults"></a>**set_defaults**: Set default values for a target type. ``` set_defaults(<target_type_name>) { <values...> } @@ -2553,7 +2579,7 @@ ``` -### **Example** +#### **Example** ``` set_defaults("static_library") { @@ -2568,7 +2594,7 @@ ``` -## **set_sources_assignment_filter**: Set a pattern to filter source files. +### <a name="set_sources_assignment_filter"></a>**set_sources_assignment_filter**: Set a pattern to filter source files. ``` The sources assignment filter is a list of patterns that remove files from @@ -2589,7 +2615,7 @@ ``` -### **How to use patterns** +#### **How to use patterns** ``` File patterns are VERY limited regular expressions. They must match the @@ -2609,7 +2635,7 @@ ``` -### **Pattern examples** +#### **Pattern examples** ``` "*asdf*" @@ -2626,7 +2652,7 @@ ``` -### **Sources assignment example** +#### **Sources assignment example** ``` # Filter out all _win files. @@ -2637,70 +2663,7 @@ ``` -## **shared_library**: Declare a shared library target. - -``` - A shared library will be specified on the linker line for targets listing the - shared library in its "deps". If you don't want this (say you dynamically - load the library at runtime), then you should depend on the shared library - via "data_deps" or, on Darwin platforms, use a "loadable_module" target type - instead. - -``` - -### **Variables** - -``` - Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, - asmflags, defines, include_dirs, ldflags, lib_dirs, libs, - precompiled_header, precompiled_source - Deps: data_deps, deps, public_deps - Dependent configs: all_dependent_configs, public_configs - General: check_includes, configs, data, inputs, output_name, - output_extension, public, sources, testonly, visibility - - -``` -## **source_set**: Declare a source set target. - -``` - A source set is a collection of sources that get compiled, but are not linked - to produce any kind of library. Instead, the resulting object files are - implicitly added to the linker line of all targets that depend on the source - set. - - In most cases, a source set will behave like a static library, except no - actual library file will be produced. This will make the build go a little - faster by skipping creation of a large static library, while maintaining the - organizational benefits of focused build targets. - - The main difference between a source set and a static library is around - handling of exported symbols. Most linkers assume declaring a function - exported means exported from the static library. The linker can then do dead - code elimination to delete code not reachable from exported functions. - - A source set will not do this code elimination since there is no link step. - This allows you to link many sources sets into a shared library and have the - "exported symbol" notation indicate "export from the final shared library and - not from the intermediate targets." There is no way to express this concept - when linking multiple static libraries into a shared library. - -``` - -### **Variables** - -``` - Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, - asmflags, defines, include_dirs, ldflags, lib_dirs, libs, - precompiled_header, precompiled_source - Deps: data_deps, deps, public_deps - Dependent configs: all_dependent_configs, public_configs - General: check_includes, configs, data, inputs, output_name, - output_extension, public, sources, testonly, visibility - - -``` -## **split_list**: Splits a list into N different sub-lists. +### <a name="split_list"></a>**split_list**: Splits a list into N different sub-lists. ``` result = split_list(input, n) @@ -2714,7 +2677,7 @@ ``` -### **Example** +#### **Example** ``` The code: @@ -2726,67 +2689,7 @@ ``` -## **static_library**: Declare a static library target. - -``` - Make a ".a" / ".lib" file. - - If you only need the static library for intermediate results in the build, - you should consider a source_set instead since it will skip the (potentially - slow) step of creating the intermediate library file. - -``` - -### **Variables** - -``` - complete_static_lib - Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, - asmflags, defines, include_dirs, ldflags, lib_dirs, libs, - precompiled_header, precompiled_source - Deps: data_deps, deps, public_deps - Dependent configs: all_dependent_configs, public_configs - General: check_includes, configs, data, inputs, output_name, - output_extension, public, sources, testonly, visibility - - -``` -## **target**: Declare an target with the given programmatic type. - -``` - target(target_type_string, target_name_string) { ... } - - The target() function is a way to invoke a built-in target or template with a - type determined at runtime. This is useful for cases where the type of a - target might not be known statically. - - Only templates and built-in target functions are supported for the - target_type_string parameter. Arbitrary functions, configs, and toolchains - are not supported. - - The call: - target("source_set", "doom_melon") { - Is equivalent to: - source_set("doom_melon") { - -``` - -### **Example** - -``` - if (foo_build_as_shared) { - my_type = "shared_library" - } else { - my_type = "source_set" - } - - target(my_type, "foo") { - ... - } - - -``` -## **template**: Define a template rule. +### <a name="template"></a>**template**: Define a template rule. ``` A template defines a custom name that acts like a function. It provides a way @@ -2801,7 +2704,7 @@ ``` -### **Variables and templates**: +#### **Variables and templates**: ``` When you call template() it creates a closure around all variables currently @@ -2833,7 +2736,7 @@ ``` -### **Target naming** +#### **Target naming** ``` Your template should almost always define a built-in target with the name the @@ -2861,7 +2764,7 @@ ``` -### **Example of defining a template** +#### **Example of defining a template** ``` template("my_idl") { @@ -2917,7 +2820,7 @@ ``` -### **Example of invoking the resulting template** +#### **Example of invoking the resulting template** ``` # This calls the template code above, defining target_name to be @@ -2939,9 +2842,9 @@ ``` -## **tool**: Specify arguments to a toolchain tool. +### <a name="tool"></a>**tool**: Specify arguments to a toolchain tool. -### **Usage** +#### **Usage** ``` tool(<tool type>) { @@ -2950,7 +2853,7 @@ ``` -### **Tool types** +#### **Tool types** ``` Compiler tools: @@ -2976,7 +2879,7 @@ ``` -### **Tool variables** +#### **Tool variables** ``` command [string with substitutions] @@ -3179,7 +3082,7 @@ ``` -### **Expansions for tool variables** +#### **Expansions for tool variables** ``` All paths are relative to the root build directory, which is the current @@ -3348,7 +3251,7 @@ ``` -### **Separate linking and dependencies for shared libraries** +#### **Separate linking and dependencies for shared libraries** ``` Shared libraries are special in that not all changes to them require that @@ -3384,7 +3287,7 @@ ``` -### **Example** +#### **Example** ``` toolchain("my_toolchain") { @@ -3406,7 +3309,7 @@ ``` -## **toolchain**: Defines a toolchain. +### <a name="toolchain"></a>**toolchain**: Defines a toolchain. ``` A toolchain is a set of commands and build flags used to compile the source @@ -3414,7 +3317,7 @@ ``` -### **Toolchain overview** +#### **Toolchain overview** ``` You can have more than one toolchain in use at once in a build and a target @@ -3454,7 +3357,7 @@ ``` -### **Functions and variables** +#### **Functions and variables** ``` tool() @@ -3494,7 +3397,7 @@ ``` -### **Example of defining a toolchain** +#### **Example of defining a toolchain** ``` toolchain("32") { @@ -3523,7 +3426,7 @@ ``` -### **Example of cross-toolchain dependencies** +#### **Example of cross-toolchain dependencies** ``` If a 64-bit target wants to depend on a 32-bit binary, it would specify a @@ -3548,7 +3451,7 @@ ``` -## **write_file**: Write a file to disk. +### <a name="write_file"></a>**write_file**: Write a file to disk. ``` write_file(filename, data) @@ -3569,7 +3472,7 @@ ``` -### **Arguments** +#### **Arguments** ``` filename @@ -3580,7 +3483,9 @@ ``` -## **current_cpu**: The processor architecture of the current toolchain. +## <a name="predefined_variables"></a>Built-in predefined variables + +### <a name="current_cpu"></a>**current_cpu**: The processor architecture of the current toolchain. ``` The build configuration usually sets this value based on the value of @@ -3595,7 +3500,7 @@ See "gn help target_cpu" for a list of common values returned. ``` -## **current_os**: The operating system of the current toolchain. +### <a name="current_os"></a>**current_os**: The operating system of the current toolchain. ``` The build configuration usually sets this value based on the value of @@ -3611,7 +3516,7 @@ ``` -## **current_toolchain**: Label of the current toolchain. +### <a name="current_toolchain"></a>**current_toolchain**: Label of the current toolchain. ``` A fully-qualified label representing the current toolchain. You can use this @@ -3620,7 +3525,7 @@ ``` -### **Example** +#### **Example** ``` if (current_toolchain == "//build:64_bit_toolchain") { @@ -3629,7 +3534,7 @@ ``` -## **default_toolchain**: [string] Label of the default toolchain. +### <a name="default_toolchain"></a>**default_toolchain**: [string] Label of the default toolchain. ``` A fully-qualified label representing the default toolchain, which may not @@ -3637,7 +3542,7 @@ ``` -## **host_cpu**: The processor architecture that GN is running on. +### <a name="host_cpu"></a>**host_cpu**: The processor architecture that GN is running on. ``` This is value is exposed so that cross-compile toolchains can access the host @@ -3650,7 +3555,7 @@ ``` -### **Some possible values** +#### **Some possible values** ``` - "x64" @@ -3658,7 +3563,7 @@ ``` -## **host_os**: [string] The operating system that GN is running on. +### <a name="host_os"></a>**host_os**: [string] The operating system that GN is running on. ``` This value is exposed so that cross-compiles can access the host build @@ -3669,7 +3574,7 @@ ``` -### **Some possible values** +#### **Some possible values** ``` - "linux" @@ -3678,7 +3583,7 @@ ``` -## **invoker**: [string] The invoking scope inside a template. +### <a name="invoker"></a>**invoker**: [string] The invoking scope inside a template. ``` Inside a template invocation, this variable refers to the scope of the @@ -3696,7 +3601,7 @@ ``` -### **Example** +#### **Example** ``` template("my_template") { @@ -3712,7 +3617,7 @@ ``` -## **python_path**: Absolute path of Python. +### <a name="python_path"></a>**python_path**: Absolute path of Python. ``` Normally used in toolchain definitions if running some command requires @@ -3721,7 +3626,7 @@ ``` -## **root_build_dir**: [string] Directory where build commands are run. +### <a name="root_build_dir"></a>**root_build_dir**: [string] Directory where build commands are run. ``` This is the root build output directory which will be the current directory @@ -3732,7 +3637,7 @@ ``` -## **root_gen_dir**: Directory for the toolchain's generated files. +### <a name="root_gen_dir"></a>**root_gen_dir**: Directory for the toolchain's generated files. ``` Absolute path to the root of the generated output directory tree for the @@ -3749,7 +3654,7 @@ ``` -## **root_out_dir**: [string] Root directory for toolchain output files. +### <a name="root_out_dir"></a>**root_out_dir**: [string] Root directory for toolchain output files. ``` Absolute path to the root of the output directory tree for the current @@ -3768,7 +3673,7 @@ ``` -### **Example** +#### **Example** ``` action("myscript") { @@ -3778,7 +3683,7 @@ ``` -## **target_cpu**: The desired cpu architecture for the build. +### <a name="target_cpu"></a>**target_cpu**: The desired cpu architecture for the build. ``` This value should be used to indicate the desired architecture for the @@ -3799,7 +3704,7 @@ ``` -### **Possible values** +#### **Possible values** ``` - "x86" @@ -3810,7 +3715,7 @@ ``` -## **target_gen_dir**: Directory for a target's generated files. +### <a name="target_gen_dir"></a>**target_gen_dir**: Directory for a target's generated files. ``` Absolute path to the target's generated file directory. This will be the @@ -3827,7 +3732,7 @@ ``` -### **Example** +#### **Example** ``` action("myscript") { @@ -3837,7 +3742,7 @@ ``` -## **target_name**: [string] The name of the current target. +### <a name="target_name"></a>**target_name**: [string] The name of the current target. ``` Inside a target or template invocation, this variable refers to the name @@ -3859,7 +3764,7 @@ ``` -### **Example** +#### **Example** ``` executable("doom_melon") { @@ -3879,7 +3784,7 @@ ``` -## **target_os**: The desired operating system for the build. +### <a name="target_os"></a>**target_os**: The desired operating system for the build. ``` This value should be used to indicate the desired operating system for the @@ -3910,7 +3815,7 @@ ``` -### **Possible values** +#### **Possible values** ``` - "android" @@ -3923,7 +3828,7 @@ ``` -## **target_out_dir**: [string] Directory for target output files. +### <a name="target_out_dir"></a>**target_out_dir**: [string] Directory for target output files. ``` Absolute path to the target's generated file directory. If your current @@ -3939,7 +3844,7 @@ ``` -### **Example** +#### **Example** ``` action("myscript") { @@ -3950,7 +3855,9 @@ ``` -## **all_dependent_configs**: Configs to be forced on dependents. +## <a name="target_variables"></a>Variables you set in targets + +### <a name="all_dependent_configs"></a>**all_dependent_configs**: Configs to be forced on dependents. ``` A list of config labels. @@ -3970,7 +3877,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -3989,7 +3896,7 @@ ``` -## **allow_circular_includes_from**: Permit includes from deps. +### <a name="allow_circular_includes_from"></a>**allow_circular_includes_from**: Permit includes from deps. ``` A list of target labels. Must be a subset of the target's "deps". These @@ -4004,7 +3911,7 @@ ``` -### **Details** +#### **Details** ``` Normally, for a file in target A to include a file from target B, A must list @@ -4026,7 +3933,7 @@ ``` -### **Danger** +#### **Danger** ``` In the above example, A's headers are likely to include headers from A's @@ -4046,7 +3953,7 @@ ``` -### **Example** +#### **Example** ``` source_set("a") { @@ -4067,7 +3974,7 @@ ``` -## **arflags**: Arguments passed to static_library archiver. +### <a name="arflags"></a>**arflags**: Arguments passed to static_library archiver. ``` A list of flags passed to the archive/lib command that creates static @@ -4084,7 +3991,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -4103,7 +4010,7 @@ ``` -## **args**: Arguments passed to an action. +### <a name="args"></a>**args**: Arguments passed to an action. ``` For action and action_foreach targets, args is the list of arguments to pass @@ -4114,7 +4021,7 @@ ``` -## **asmflags**: Flags passed to the assembler. +### <a name="asmflags"></a>**asmflags**: Flags passed to the assembler. ``` A list of strings. @@ -4124,7 +4031,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -4143,7 +4050,7 @@ ``` -## **assert_no_deps**: Ensure no deps on these targets. +### <a name="assert_no_deps"></a>**assert_no_deps**: Ensure no deps on these targets. ``` A list of label patterns. @@ -4172,7 +4079,7 @@ ``` -### **Example** +#### **Example** ``` executable("doom_melon") { @@ -4186,7 +4093,7 @@ ``` -## **bundle_deps_filter**: [label list] A list of labels that are filtered out. +### <a name="bundle_deps_filter"></a>**bundle_deps_filter**: [label list] A list of labels that are filtered out. ``` A list of target labels. @@ -4203,7 +4110,7 @@ ``` -### **Example** +#### **Example** ``` create_bundle("today_extension") { @@ -4220,7 +4127,7 @@ ``` -## **bundle_executable_dir**: Expansion of {{bundle_executable_dir}} in +### <a name="bundle_executable_dir"></a>**bundle_executable_dir**: Expansion of {{bundle_executable_dir}} in ``` create_bundle. @@ -4234,7 +4141,7 @@ ``` -## **bundle_plugins_dir**: Expansion of {{bundle_plugins_dir}} in create_bundle. +### <a name="bundle_plugins_dir"></a>**bundle_plugins_dir**: Expansion of {{bundle_plugins_dir}} in create_bundle. ``` A string corresponding to a path in $root_build_dir. @@ -4247,7 +4154,7 @@ ``` -## **bundle_resources_dir**: Expansion of {{bundle_resources_dir}} in +### <a name="bundle_resources_dir"></a>**bundle_resources_dir**: Expansion of {{bundle_resources_dir}} in ``` create_bundle. @@ -4261,7 +4168,7 @@ ``` -## **bundle_root_dir**: Expansion of {{bundle_root_dir}} in create_bundle. +### <a name="bundle_root_dir"></a>**bundle_root_dir**: Expansion of {{bundle_root_dir}} in create_bundle. ``` A string corresponding to a path in root_build_dir. @@ -4272,7 +4179,7 @@ ``` -### **Example** +#### **Example** ``` bundle_data("info_plist") { @@ -4290,7 +4197,7 @@ ``` -## **cflags***: Flags passed to the C compiler. +### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler. ``` A list of strings. @@ -4307,7 +4214,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -4326,7 +4233,7 @@ ``` -## **cflags***: Flags passed to the C compiler. +### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler. ``` A list of strings. @@ -4343,7 +4250,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -4362,7 +4269,7 @@ ``` -## **cflags***: Flags passed to the C compiler. +### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler. ``` A list of strings. @@ -4379,7 +4286,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -4398,7 +4305,7 @@ ``` -## **cflags***: Flags passed to the C compiler. +### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler. ``` A list of strings. @@ -4415,7 +4322,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -4434,7 +4341,7 @@ ``` -## **cflags***: Flags passed to the C compiler. +### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler. ``` A list of strings. @@ -4451,7 +4358,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -4470,7 +4377,7 @@ ``` -## **check_includes**: [boolean] Controls whether a target's files are checked. +### <a name="check_includes"></a>**check_includes**: [boolean] Controls whether a target's files are checked. ``` When true (the default), the "gn check" command (as well as "gn gen" with the @@ -4490,7 +4397,7 @@ ``` -### **Example** +#### **Example** ``` source_set("busted_includes") { @@ -4501,7 +4408,7 @@ ``` -## **code_signing_args**: [string list] Arguments passed to code signing script. +### <a name="code_signing_args"></a>**code_signing_args**: [string list] Arguments passed to code signing script. ``` For create_bundle targets, code_signing_args is the list of arguments to pass @@ -4512,7 +4419,7 @@ ``` -## **code_signing_outputs**: [file list] Output files for code signing step. +### <a name="code_signing_outputs"></a>**code_signing_outputs**: [file list] Output files for code signing step. ``` Outputs from the code signing step of a create_bundle target. Must refer to @@ -4522,7 +4429,7 @@ ``` -## **code_signing_script**: [file name] Script for code signing." +### <a name="code_signing_script"></a>**code_signing_script**: [file name] Script for code signing." ``` An absolute or buildfile-relative file name of a Python script to run for a @@ -4532,7 +4439,7 @@ ``` -## **code_signing_sources**: [file list] Sources for code signing step. +### <a name="code_signing_sources"></a>**code_signing_sources**: [file list] Sources for code signing step. ``` A list of files used as input for code signing script step of a create_bundle @@ -4543,7 +4450,7 @@ ``` -## **complete_static_lib**: [boolean] Links all deps into a static library. +### <a name="complete_static_lib"></a>**complete_static_lib**: [boolean] Links all deps into a static library. ``` A static library normally doesn't include code from dependencies, but instead @@ -4571,7 +4478,7 @@ ``` -### **Example** +#### **Example** ``` static_library("foo") { @@ -4581,14 +4488,14 @@ ``` -## **configs**: Configs applying to this target or config. +### <a name="configs"></a>**configs**: Configs applying to this target or config. ``` A list of config labels. ``` -### **Configs on a target** +#### **Configs on a target** ``` When used on a target, the include_dirs, defines, etc. in each config are @@ -4607,7 +4514,7 @@ ``` -### **Configs on a config** +#### **Configs on a config** ``` It is possible to create composite configs by specifying configs on a config. @@ -4632,7 +4539,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -4651,7 +4558,7 @@ ``` -### **Example** +#### **Example** ``` # Configs on a target. @@ -4680,7 +4587,7 @@ ``` -## **console**: Run this action in the console pool. +### <a name="console"></a>**console**: Run this action in the console pool. ``` Boolean. Defaults to false. @@ -4695,7 +4602,7 @@ ``` -### **Example** +#### **Example** ``` action("long_action_with_progress_logs") { @@ -4704,7 +4611,7 @@ ``` -## **data**: Runtime data file dependencies. +### <a name="data"></a>**data**: Runtime data file dependencies. ``` Lists files or directories required to run the given target. These are @@ -4735,7 +4642,7 @@ ``` -## **data_deps**: Non-linked dependencies. +### <a name="data_deps"></a>**data_deps**: Non-linked dependencies. ``` A list of target labels. @@ -4754,7 +4661,7 @@ ``` -### **Example** +#### **Example** ``` executable("foo") { @@ -4764,7 +4671,7 @@ ``` -## **defines**: C preprocessor defines. +### <a name="defines"></a>**defines**: C preprocessor defines. ``` A list of strings @@ -4774,7 +4681,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -4793,14 +4700,14 @@ ``` -### **Example** +#### **Example** ``` defines = [ "AWESOME_FEATURE", "LOG_LEVEL=3" ] ``` -## **depfile**: [string] File name for input dependencies for actions. +### <a name="depfile"></a>**depfile**: [string] File name for input dependencies for actions. ``` If nonempty, this string specifies that the current action or action_foreach @@ -4825,7 +4732,7 @@ ``` -### **Example** +#### **Example** ``` action_foreach("myscript_target") { @@ -4842,7 +4749,7 @@ ``` -## **deps**: Private linked dependencies. +### <a name="deps"></a>**deps**: Private linked dependencies. ``` A list of target labels. @@ -4854,7 +4761,7 @@ ``` -### **Details of dependency propagation** +#### **Details of dependency propagation** ``` Source sets, shared libraries, and non-complete static libraries will be @@ -4878,7 +4785,7 @@ ``` -## **include_dirs**: Additional include directories. +### <a name="include_dirs"></a>**include_dirs**: Additional include directories. ``` A list of source directories. @@ -4888,7 +4795,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -4907,14 +4814,14 @@ ``` -### **Example** +#### **Example** ``` include_dirs = [ "src/include", "//third_party/foo" ] ``` -## **inputs**: Additional compile-time dependencies. +### <a name="inputs"></a>**inputs**: Additional compile-time dependencies. ``` Inputs are compile-time dependencies of the current target. This means that @@ -4925,7 +4832,7 @@ ``` -### **Inputs for actions** +#### **Inputs for actions** ``` For action and action_foreach targets, inputs should be the inputs to script @@ -4947,7 +4854,7 @@ ``` -### **Script input gotchas** +#### **Script input gotchas** ``` It may be tempting to write a script that enumerates all files in a directory @@ -4965,7 +4872,7 @@ ``` -### **Inputs for binary targets** +#### **Inputs for binary targets** ``` Any input dependencies will be resolved before compiling any sources. @@ -4980,7 +4887,7 @@ ``` -### **Example** +#### **Example** ``` action("myscript") { @@ -4990,7 +4897,7 @@ ``` -## **ldflags**: Flags passed to the linker. +### <a name="ldflags"></a>**ldflags**: Flags passed to the linker. ``` A list of strings. @@ -5006,7 +4913,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -5025,7 +4932,7 @@ ``` -## **lib_dirs**: Additional library directories. +### <a name="lib_dirs"></a>**lib_dirs**: Additional library directories. ``` A list of directories. @@ -5042,7 +4949,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -5065,14 +4972,14 @@ ``` -### **Example** +#### **Example** ``` lib_dirs = [ "/usr/lib/foo", "lib/doom_melon" ] ``` -## **libs**: Additional libraries to link. +### <a name="libs"></a>**libs**: Additional libraries to link. ``` A list of library names or library paths. @@ -5088,7 +4995,7 @@ ``` -### **Types of libs** +#### **Types of libs** ``` There are several different things that can be expressed in libs: @@ -5116,7 +5023,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -5139,7 +5046,7 @@ ``` -### **Examples** +#### **Examples** ``` On Windows: @@ -5150,7 +5057,7 @@ ``` -## **output_dir**: [directory] Directory to put output file in. +### <a name="output_dir"></a>**output_dir**: [directory] Directory to put output file in. ``` For library and executable targets, overrides the directory for the final @@ -5170,7 +5077,7 @@ ``` -### **Example** +#### **Example** ``` shared_library("doom_melon") { @@ -5180,7 +5087,7 @@ ``` -## **output_extension**: Value to use for the output's file extension. +### <a name="output_extension"></a>**output_extension**: Value to use for the output's file extension. ``` Normally the file extension for a target is based on the target type and the @@ -5197,7 +5104,7 @@ ``` -### **Example** +#### **Example** ``` shared_library("freetype") { @@ -5219,7 +5126,7 @@ ``` -## **output_name**: Define a name for the output file other than the default. +### <a name="output_name"></a>**output_name**: Define a name for the output file other than the default. ``` Normally the output name of a target will be based on the target name, so the @@ -5239,7 +5146,7 @@ ``` -### **Example** +#### **Example** ``` static_library("doom_melon") { @@ -5248,7 +5155,7 @@ ``` -## **output_prefix_override**: Don't use prefix for output name. +### <a name="output_prefix_override"></a>**output_prefix_override**: Don't use prefix for output name. ``` A boolean that overrides the output prefix for a target. Defaults to false. @@ -5263,7 +5170,7 @@ ``` -### **Example** +#### **Example** ``` shared_library("doom_melon") { @@ -5275,7 +5182,7 @@ ``` -## **outputs**: Output files for actions and copy targets. +### <a name="outputs"></a>**outputs**: Output files for actions and copy targets. ``` Outputs is valid for "copy", "action", and "action_foreach" target types and @@ -5300,7 +5207,7 @@ ``` -## **precompiled_header**: [string] Header file to precompile. +### <a name="precompiled_header"></a>**precompiled_header**: [string] Header file to precompile. ``` Precompiled headers will be used when a target specifies this value, or a @@ -5319,7 +5226,7 @@ ``` -### **GCC precompiled headers** +#### **GCC precompiled headers** ``` When using GCC-style precompiled headers, "precompiled_source" contains the @@ -5331,7 +5238,7 @@ ``` -### **MSVC precompiled headers** +#### **MSVC precompiled headers** ``` When using MSVC-style precompiled headers, the "precompiled_header" value is @@ -5372,14 +5279,14 @@ ``` -## **precompiled_header_type**: [string] "gcc" or "msvc". +### <a name="precompiled_header_type"></a>**precompiled_header_type**: [string] "gcc" or "msvc". ``` See "gn help precompiled_header". ``` -## **precompiled_source**: [file name] Source file to precompile. +### <a name="precompiled_source"></a>**precompiled_source**: [file name] Source file to precompile. ``` The source file that goes along with the precompiled_header when using @@ -5388,7 +5295,7 @@ ``` -## **product_type**: Product type for Xcode projects. +### <a name="product_type"></a>**product_type**: Product type for Xcode projects. ``` Correspond to the type of the product of a create_bundle target. Only @@ -5399,7 +5306,7 @@ ``` -## **public**: Declare public header files for a target. +### <a name="public"></a>**public**: Declare public header files for a target. ``` A list of files that other targets can include. These permissions are checked @@ -5426,7 +5333,7 @@ ``` -### **Examples** +#### **Examples** ``` These exact files are public: @@ -5437,7 +5344,7 @@ ``` -## **public_configs**: Configs to be applied on dependents. +### <a name="public_configs"></a>**public_configs**: Configs to be applied on dependents. ``` A list of config labels. @@ -5456,7 +5363,7 @@ ``` -### **Ordering of flags and values** +#### **Ordering of flags and values** ``` 1. Those set on the current target (not in a config). @@ -5475,7 +5382,7 @@ ``` -## **public_deps**: Declare public dependencies. +### <a name="public_deps"></a>**public_deps**: Declare public dependencies. ``` Public dependencies are like private dependencies (see "gn help deps") but @@ -5496,7 +5403,7 @@ ``` -### **Discussion** +#### **Discussion** ``` Say you have three targets: A -> B -> C. C's visibility may allow B to depend @@ -5512,7 +5419,7 @@ ``` -### **Example** +#### **Example** ``` # This target can include files from "c" but not from @@ -5528,7 +5435,7 @@ ``` -## **response_file_contents**: Contents of a response file for actions. +### <a name="response_file_contents"></a>**response_file_contents**: Contents of a response file for actions. ``` Sometimes the arguments passed to a script can be too long for the system's @@ -5549,7 +5456,7 @@ ``` -### **Example** +#### **Example** ``` action("process_lots_of_files") { @@ -5569,7 +5476,7 @@ ``` -## **script**: Script file for actions. +### <a name="script"></a>**script**: Script file for actions. ``` An absolute or buildfile-relative file name of a Python script to run for a @@ -5578,7 +5485,7 @@ ``` -## **sources**: Source files for a target +### <a name="sources"></a>**sources**: Source files for a target ``` A list of files. Non-absolute paths will be resolved relative to the current @@ -5586,7 +5493,7 @@ ``` -### **Sources for binary targets** +#### **Sources for binary targets** ``` For binary targets (source sets, executables, and libraries), the known file @@ -5604,7 +5511,7 @@ ``` -### **Sources for non-binary targets** +#### **Sources for non-binary targets** ``` action_foreach @@ -5620,7 +5527,7 @@ ``` -## **testonly**: Declares a target must only be used for testing. +### <a name="testonly"></a>**testonly**: Declares a target must only be used for testing. ``` Boolean. Defaults to false. @@ -5634,7 +5541,7 @@ ``` -### **Example** +#### **Example** ``` source_set("test_support") { @@ -5644,7 +5551,7 @@ ``` -## **visibility**: A list of labels that can depend on a target. +### <a name="visibility"></a>**visibility**: A list of labels that can depend on a target. ``` A list of labels and label patterns that define which targets can depend on @@ -5663,7 +5570,7 @@ ``` -### **Patterns** +#### **Patterns** ``` See "gn help label_pattern" for more details on what types of patterns are @@ -5673,7 +5580,7 @@ ``` -### **Examples** +#### **Examples** ``` Only targets in the current buildfile ("private"): @@ -5703,7 +5610,7 @@ ``` -## **write_runtime_deps**: Writes the target's runtime_deps to the given path. +### <a name="write_runtime_deps"></a>**write_runtime_deps**: Writes the target's runtime_deps to the given path. ``` Does not synchronously write the file, but rather schedules it to be written @@ -5725,7 +5632,9 @@ ``` -## **Build Arguments Overview** +## <a name="other"></a>Other help topics + +### <a name="buildargs"></a>**Build Arguments Overview** ``` Build arguments are variables passed in from outside of the build that build @@ -5733,7 +5642,7 @@ ``` -### **How build arguments are set** +#### **How build arguments are set** ``` First, system default arguments are set based on the current system. The @@ -5763,7 +5672,7 @@ ``` -### **Examples** +#### **Examples** ``` gn args out/FooBar @@ -5779,7 +5688,7 @@ ``` -### **How build arguments are used** +#### **How build arguments are used** ``` If you want to use an argument, you use declare_args() and specify default @@ -5794,7 +5703,7 @@ ``` -## **.gn file** +### <a name="dotfile"></a>**.gn file** ``` When gn starts, it will search the current directory and parent directories @@ -5812,7 +5721,7 @@ ``` -### **Variables** +#### **Variables** ``` arg_file_template [optional] @@ -5878,7 +5787,7 @@ ``` -### **Example .gn file contents** +#### **Example .gn file contents** ``` buildconfig = "//build/config/BUILDCONFIG.gn" @@ -5900,9 +5809,9 @@ ``` -## **Build graph and execution overview** +### <a name="execution"></a>**Build graph and execution overview** -### **Overall build flow** +#### **Overall build flow** ``` 1. Look for ".gn" file (see "gn help dotfile") in the current directory and @@ -5928,7 +5837,7 @@ ``` -### **Executing target definitions and templates** +#### **Executing target definitions and templates** ``` Build files are loaded in parallel. This means it is impossible to @@ -5956,7 +5865,7 @@ ``` -### **Which targets are built** +#### **Which targets are built** ``` All targets encountered in the default toolchain (see "gn help toolchain") @@ -5972,7 +5881,7 @@ ``` -### **Dependencies** +#### **Dependencies** ``` The only difference between "public_deps" and "deps" except for pushing @@ -5988,9 +5897,9 @@ ``` -## **Language and grammar for GN build files** +### <a name="grammar"></a>**Language and grammar for GN build files** -### **Tokens** +#### **Tokens** ``` GN build files are read as sequences of tokens. While splitting the file @@ -5999,7 +5908,7 @@ ``` -### **White space and comments** +#### **White space and comments** ``` White space is comprised of spaces (U+0020), horizontal tabs (U+0009), @@ -6012,7 +5921,7 @@ ``` -### **Identifiers** +#### **Identifiers** ``` Identifiers name variables and functions. @@ -6023,7 +5932,7 @@ ``` -### **Keywords** +#### **Keywords** ``` The following keywords are reserved and may not be used as identifiers: @@ -6032,7 +5941,7 @@ ``` -### **Integer literals** +#### **Integer literals** ``` An integer literal represents a decimal integer value. @@ -6043,7 +5952,7 @@ ``` -### **String literals** +#### **String literals** ``` A string literal represents a string value consisting of the quoted @@ -6078,7 +5987,7 @@ ``` -### **Punctuation** +#### **Punctuation** ``` The following character sequences represent punctuation: @@ -6090,7 +5999,7 @@ ``` -### **Grammar** +#### **Grammar** ``` The input tokens form a syntax tree following a context-free grammar: @@ -6128,7 +6037,7 @@ ``` -### **Types** +#### **Types** ``` The GN language is dynamically typed. The following types are used: @@ -6151,7 +6060,7 @@ ``` -### **Lists** +#### **Lists** ``` Lists are created with [] and using commas to separate items: @@ -6188,7 +6097,7 @@ ``` -### **Scopes** +#### **Scopes** ``` All execution happens in the context of a scope which holds the current state @@ -6223,7 +6132,7 @@ ``` -## **input_conversion**: Specifies how to transform input to a variable. +### <a name="input_conversion"></a>**input_conversion**: Specifies how to transform input to a variable. ``` input_conversion is an argument to read_file and exec_script that specifies @@ -6277,7 +6186,7 @@ ``` -## **Label patterns** +### <a name="label_pattern"></a>**Label patterns** ``` A label pattern is a way of expressing one or more labels in a portion of the @@ -6314,7 +6223,7 @@ ``` -## **About labels** +### <a name="labels"></a>**About labels** ``` Everything that can participate in the dependency graph (targets, configs, @@ -6334,7 +6243,7 @@ ``` -### **Toolchains** +#### **Toolchains** ``` A canonical label includes the label of the toolchain being used. Normally, @@ -6348,7 +6257,7 @@ ``` -### **Relative labels** +#### **Relative labels** ``` If you want to refer to something in the same buildfile, you can omit @@ -6368,7 +6277,7 @@ ``` -### **Implicit names** +#### **Implicit names** ``` If a name is unspecified, it will inherit the directory name. Stylistically, @@ -6379,9 +6288,9 @@ ``` -## **Ninja build rules** +### <a name="ninja_rules"></a>**Ninja build rules** -### **The "all" and "default" rules** +#### **The "all" and "default" rules** ``` All generated targets (see "gn help execution") will be added to an implicit @@ -6392,7 +6301,7 @@ ``` -### **Phony rules** +#### **Phony rules** ``` GN generates Ninja "phony" rules for targets in the default toolchain. The @@ -6430,7 +6339,7 @@ ``` -## **nogncheck**: Skip an include line from checking. +### <a name="nogncheck"></a>**nogncheck**: Skip an include line from checking. ``` GN's header checker helps validate that the includes match the build @@ -6461,7 +6370,7 @@ ``` -### **More information** +#### **More information** ``` The topic "gn help check" has general information on how checking works and @@ -6470,7 +6379,7 @@ ``` -## **Runtime dependencies** +### <a name="runtime_deps"></a>**Runtime dependencies** ``` Runtime dependencies of a target are exposed via the "runtime_deps" category @@ -6485,7 +6394,7 @@ ``` -### **Executables** +#### **Executables** ``` Executable targets and those executable targets' transitive dependencies are @@ -6495,7 +6404,7 @@ ``` -### **Actions and copies** +#### **Actions and copies** ``` Action and copy targets that are listed as "data_deps" will have all of their @@ -6531,7 +6440,7 @@ ``` -### **Static libraries and source sets** +#### **Static libraries and source sets** ``` The results of static_library or source_set targets are not considered @@ -6543,7 +6452,7 @@ ``` -### **Multiple outputs** +#### **Multiple outputs** ``` Linker tools can specify which of their outputs should be considered when @@ -6552,7 +6461,7 @@ ``` -## **How Source Expansion Works** +### <a name="source_expansion"></a>**How Source Expansion Works** ``` Source expansion is used for the action_foreach and copy target types to map @@ -6574,7 +6483,7 @@ ``` -### **Placeholders** +#### **Placeholders** ``` This section discusses only placeholders for actions. There are other @@ -6629,7 +6538,7 @@ ``` -### **(*) Note on directories** +#### **(*) Note on directories** ``` Paths containing directories (except the source_root_relative_dir) will be @@ -6646,7 +6555,7 @@ ``` -### **Examples** +#### **Examples** ``` Non-varying outputs: @@ -6671,6 +6580,8 @@ ``` +## <a name="switches"></a>Command Line Switches + **Available global switches ** Do "gn help --the_switch_you_want_help_on" for more. Individual commands may take command-specific switches not listed here. See the @@ -6678,20 +6589,21 @@ ``` -** \--args**: Specifies build arguments overrides. -** \--color**: Force colored output. -** \--dotfile**: Override the name of the ".gn" file. -** \--fail-on-unused-args**: Treat unused build args as fatal errors. -** \--markdown**: Write help output in the Markdown format. -** \--nocolor**: Force non-colored output. -** -q**: Quiet mode. Don't print output on success. -** \--root**: Explicitly specify source root. -** \--runtime-deps-list-file**: Save runtime dependencies for targets in file. -** \--script-executable**: Set the executable used to execute scripts. -** \--threads**: Specify number of worker threads. -** \--time**: Outputs a summary of how long everything took. -** \--tracelog**: Writes a Chrome-compatible trace log to the given file. -** -v**: Verbose logging. -** \--version**: Prints the GN version number and exits. + * [--args: Specifies build arguments overrides.](#--args) + * [--color: Force colored output.](#--color) + * [--dotfile: Override the name of the ".gn" file.](#--dotfile) + * [--fail-on-unused-args: Treat unused build args as fatal errors.](#--fail-on-unused-args) + * [--markdown: Write help output in the Markdown format.](#--markdown) + * [--nocolor: Force non-colored output.](#--nocolor) + * [-q: Quiet mode. Don't print output on success.](#-q) + * [--root: Explicitly specify source root.](#--root) + * [--runtime-deps-list-file: Save runtime dependencies for targets in file.](#--runtime-deps-list-file) + * [--script-executable: Set the executable used to execute scripts.](#--script-executable) + * [--threads: Specify number of worker threads.](#--threads) + * [--time: Outputs a summary of how long everything took.](#--time) + * [--tracelog: Writes a Chrome-compatible trace log to the given file.](#--tracelog) + * [-v: Verbose logging.](#-v) + * [--version: Prints the GN version number and exits.](#--version) ``` +
diff --git a/tools/gn/standard_out.cc b/tools/gn/standard_out.cc index 6f7dcc8f..fa347e2a 100644 --- a/tools/gn/standard_out.cc +++ b/tools/gn/standard_out.cc
@@ -193,16 +193,41 @@ #endif +void PrintSectionHelp(const std::string& line, + const std::string& topic, + const std::string& tag) { + EnsureInitialized(); + + if (is_markdown) { + OutputString("* [" + line + "](#" + tag + ")\n"); + } else if (topic.size()) { + OutputString("\n" + line + " (type \"gn help " + topic + + "\" for more help):\n"); + } else { + OutputString("\n" + line + ":\n"); + } +} + void PrintShortHelp(const std::string& line) { EnsureInitialized(); size_t colon_offset = line.find(':'); size_t first_normal = 0; if (colon_offset != std::string::npos) { - OutputString(" " + line.substr(0, colon_offset), DECORATION_YELLOW); - first_normal = colon_offset; + if (is_markdown) { + OutputString(" * [" + line + "](#" + line.substr(0, colon_offset) + + ")\n"); + } else { + OutputString(" " + line.substr(0, colon_offset), DECORATION_YELLOW); + first_normal = colon_offset; + } + } else if (is_markdown) { + OutputString(" * [" + line + "](" + line + ")\n"); } + if (is_markdown) + return; + // See if the colon is followed by a " [" and if so, dim the contents of [ ]. if (first_normal > 0 && line.size() > first_normal + 2 && @@ -221,7 +246,7 @@ OutputString(line.substr(first_normal) + "\n"); } -void PrintLongHelp(const std::string& text) { +void PrintLongHelp(const std::string& text, const std::string& tag) { EnsureInitialized(); bool first_header = true; @@ -232,8 +257,8 @@ if (!line.empty() && line[0] != ' ') { if (is_markdown) { // GN's block-level formatting is converted to markdown as follows: - // * The first heading is treated as an H2. - // * Subsequent heading are treated as H3s. + // * The first heading is treated as an H3. + // * Subsequent heading are treated as H4s. // * Any other text is wrapped in a code block and displayed as-is. // // Span-level formatting (the decorations) is converted inside @@ -244,10 +269,18 @@ } if (first_header) { - OutputString("## ", DECORATION_NONE); + std::string the_tag = tag; + if (the_tag.size() == 0) { + if (line.substr(0, 2) == "gn") { + the_tag = line.substr(3, line.substr(3).find(' ')); + } else { + the_tag = line.substr(0, line.find(':')); + } + } + OutputString("### <a name=\"" + the_tag + "\"></a>", DECORATION_NONE); first_header = false; } else { - OutputString("### ", DECORATION_NONE); + OutputString("#### ", DECORATION_NONE); } } @@ -257,7 +290,8 @@ chars_to_highlight = line.size(); OutputString(line.substr(0, chars_to_highlight), DECORATION_YELLOW); - OutputString(line.substr(chars_to_highlight) + "\n"); + OutputString(line.substr(chars_to_highlight)); + OutputString("\n"); continue; } else if (is_markdown && !line.empty() && !in_body) { OutputString("```\n", DECORATION_NONE);
diff --git a/tools/gn/standard_out.h b/tools/gn/standard_out.h index 9ccbe52..f2bb733b 100644 --- a/tools/gn/standard_out.h +++ b/tools/gn/standard_out.h
@@ -19,6 +19,12 @@ void OutputString(const std::string& output, TextDecoration dec = DECORATION_NONE); +// If printing markdown, this generates table-of-contents entries with +// links to the actual help; otherwise, prints a one-line description. +void PrintSectionHelp(const std::string& line, + const std::string& topic, + const std::string& tag); + // Prints a line for a command, assuming there is a colon. Everything before // the colon is the command (and is highlighted). After the colon if there is // a square bracket, the contents of the bracket is dimmed. @@ -30,6 +36,6 @@ // - Lines beginning with non-whitespace are highlighted up to the first // colon (or the whole line if not). // - Lines whose first non-whitespace character is a # are dimmed. -void PrintLongHelp(const std::string& text); +void PrintLongHelp(const std::string& text, const std::string& tag = ""); #endif // TOOLS_GN_STANDARD_OUT_H_
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 459eda5..fb8d143 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -67095,6 +67095,20 @@ <summary>Version of pre-existing database at startup.</summary> </histogram> +<histogram name="Sqlite.Vfs" units="bytes"> + <owner>shess@chromium.org</owner> + <summary> + Buffer sizes passed to browser-process SQLite VFS functions. + </summary> +</histogram> + +<histogram name="Sqlite.Vfs_Events" enum="SqliteVfsEvents"> + <owner>shess@chromium.org</owner> + <summary> + I/O operations measured by browser-process SQLite VFS wrapper. + </summary> +</histogram> + <histogram name="Sqlite.Web.Error" enum="SqliteErrorCode"> <obsolete> Moved to Sqlite.Error.Web in M-27. @@ -110355,6 +110369,21 @@ <int value="5" label="DEPRECATION_RAZE_FAILED">Raze failed.</int> </enum> +<enum name="SqliteVfsEvents" type="int"> + <summary>I/O events from browser-process SQLite VFS wrapper.</summary> + <int value="0" label="VFS_OPEN">Calls to xOpen().</int> + <int value="1" label="VFS_DELETE">Calls to xDelete().</int> + <int value="2" label="VFS_ACCESS">Calls to xAccess().</int> + <int value="3" label="VFS_FULLPATHNAME">Calls to xFullPath().</int> + <int value="4" label="VFS_IO_CLOSE">Calls to xClose().</int> + <int value="5" label="VFS_IO_READ">Calls to xRead().</int> + <int value="6" label="VFS_IO_WRITE">Calls to xWrite().</int> + <int value="7" label="VFS_IO_TRUNCATE">Calls to xTruncate().</int> + <int value="8" label="VFS_IO_SYNC">Calls to xSync().</int> + <int value="9" label="VFS_IO_FILESIZE">Calls to xFileSize().</int> + <int value="10" label="VFS_IO_FETCH">Calls to xFetch().</int> +</enum> + <enum name="SRIResourceIntegrityMismatchEvent" type="int"> <int value="0" label="CHECKING_FOR_INTEGRITY_MISMATCH"/> <int value="1" label="REFETCH_DUE_TO_INTEGRITY_MISMATCH"/> @@ -122201,6 +122230,14 @@ <affected-histogram name="Sqlite.Version"/> </histogram_suffixes> +<histogram_suffixes name="SqliteVfsOperations" separator="_"> + <owner>shess@chromium.org</owner> + <suffix name="Fetch" label="fetch"/> + <suffix name="Read" label="read"/> + <suffix name="Write" label="write"/> + <affected-histogram name="Sqlite.Vfs"/> +</histogram_suffixes> + <histogram_suffixes name="SSLFalseStart"> <obsolete> Removed 2011-06-01.
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc index 7637bcdd..083ad36 100644 --- a/ui/compositor/compositor.cc +++ b/ui/compositor/compositor.cc
@@ -188,9 +188,10 @@ } } - // Note: Only enable image decode tasks if we have more than one worker - // thread. - settings.image_decode_tasks_enabled = false; + // Note: Although there is only one image decode thread, we should still get a + // benefit from locking images across several raster tasks. At worst, this + // should do as much work as it would anyway. + settings.image_decode_tasks_enabled = true; settings.gpu_memory_policy.bytes_limit_when_visible = 512 * 1024 * 1024; settings.gpu_memory_policy.priority_cutoff_when_visible =
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc index 977a0ff..1b1d8ed 100644 --- a/ui/compositor/layer.cc +++ b/ui/compositor/layer.cc
@@ -158,16 +158,6 @@ std::unique_ptr<Layer> Layer::Clone() const { auto clone = base::MakeUnique<Layer>(type_); - clone->SetTransform(GetTargetTransform()); - clone->SetBounds(bounds_); - clone->SetSubpixelPositionOffset(subpixel_position_offset_); - clone->SetMasksToBounds(GetMasksToBounds()); - clone->SetOpacity(GetTargetOpacity()); - clone->SetVisible(GetTargetVisibility()); - clone->SetFillsBoundsOpaquely(fills_bounds_opaquely_); - clone->SetFillsBoundsCompletely(fills_bounds_completely_); - clone->set_name(name_); - // Background filters. clone->SetBackgroundBlur(background_blur_radius_); clone->SetBackgroundZoom(zoom_, zoom_inset_); @@ -187,6 +177,17 @@ } else if (type_ == LAYER_SOLID_COLOR) { clone->SetColor(GetTargetColor()); } + + clone->SetTransform(GetTargetTransform()); + clone->SetBounds(bounds_); + clone->SetSubpixelPositionOffset(subpixel_position_offset_); + clone->SetMasksToBounds(GetMasksToBounds()); + clone->SetOpacity(GetTargetOpacity()); + clone->SetVisible(GetTargetVisibility()); + clone->SetFillsBoundsOpaquely(fills_bounds_opaquely_); + clone->SetFillsBoundsCompletely(fills_bounds_completely_); + clone->set_name(name_); + return clone; }
diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc index 8258ac2..9056ffe 100644 --- a/ui/compositor/layer_unittest.cc +++ b/ui/compositor/layer_unittest.cc
@@ -790,6 +790,19 @@ EXPECT_FALSE(clone->layer_inverted()); EXPECT_FALSE(clone->fills_bounds_opaquely()); + // A solid color layer with transparent color can be marked as opaque. The + // clone should retain this state. + layer.reset(CreateLayer(LAYER_SOLID_COLOR)); + layer->SetColor(kTransparent); + layer->SetFillsBoundsOpaquely(true); + + clone = layer->Clone(); + EXPECT_TRUE(clone->GetTargetTransform().IsIdentity()); + EXPECT_EQ(kTransparent, clone->background_color()); + EXPECT_EQ(kTransparent, clone->GetTargetColor()); + EXPECT_FALSE(clone->layer_inverted()); + EXPECT_TRUE(clone->fills_bounds_opaquely()); + layer.reset(CreateLayer(LAYER_SOLID_COLOR)); layer->SetVisible(true); layer->SetOpacity(1.0f);