chromium/ios/web/public/thread/web_task_traits.h

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_WEB_PUBLIC_THREAD_WEB_TASK_TRAITS_H_
#define IOS_WEB_PUBLIC_THREAD_WEB_TASK_TRAITS_H_

#include "base/task/task_traits.h"
#include "ios/web/public/thread/web_thread.h"

namespace web {

class WebTaskTraits : public base::TaskTraits {
 public:
  struct ValidTrait : public base::TaskTraits::ValidTrait {
    // TODO(crbug.com/40217644): iOS never supported TaskPriority, but some
    // callers are providing it... Add support?
    ValidTrait(base::TaskPriority);

    // TODO(crbug.com/40108370): These traits are meaningless on WebThreads but
    // some callers of post_task.h had been using them in conjunction with
    // WebThread::ID traits. Remove such usage post-migration.
    ValidTrait(base::MayBlock);
    ValidTrait(base::TaskShutdownBehavior);
  };

  template <class... ArgTypes>
    requires base::trait_helpers::AreValidTraits<ValidTrait, ArgTypes...>
  constexpr WebTaskTraits(ArgTypes... args) : base::TaskTraits(args...) {}
};

}  // namespace web

#endif  // IOS_WEB_PUBLIC_THREAD_WEB_TASK_TRAITS_H_