blob: 449359e5eadded1e1985357c628247698b09e21e [file] [log] [blame]
// Copyright 2014 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 IOS_WEB_PUBLIC_TEST_TEST_WEB_THREAD_H_
#define IOS_WEB_PUBLIC_TEST_TEST_WEB_THREAD_H_
#include <memory>
#include "base/macros.h"
#include "ios/web/public/web_thread.h"
namespace base {
class MessageLoop;
class Thread;
}
namespace web {
class WebSubThread;
class WebThreadImpl;
// DEPRECATED: use TestWebThreadBundle instead.
// A WebThread for unit tests; this lets unit tests outside of web create
// WebThread instances.
class TestWebThread {
public:
// Constructs a TestWebThread with a |real_thread_| and starts it (with a
// MessageLoopForIO if |identifier == WebThread::IO|).
explicit TestWebThread(WebThread::ID identifier);
// Constructs a TestWebThread "running" on |thread_runner| (no
// |real_thread_|).
TestWebThread(WebThread::ID identifier,
scoped_refptr<base::SingleThreadTaskRunner> thread_runner);
// Constructs a TestWebThread based on |message_loop| (no |real_thread_|).
TestWebThread(WebThread::ID identifier, base::MessageLoop* message_loop);
~TestWebThread();
// Provides a subset of the capabilities of the Thread interface to enable
// certain unit tests. To avoid a stronger dependency of the internals of
// WebThread, do no provide the full Thread interface.
// Starts the thread with a generic message loop.
void Start();
// Starts the thread with an IOThread message loop.
void StartIOThread();
// Together these are the same as StartIOThread(). They can be called in
// phases to test binding WebThread::IO after its underlying thread was
// started.
void StartIOThreadUnregistered();
void RegisterAsWebThread();
// Stops the thread.
void Stop();
private:
const WebThread::ID identifier_;
// A real thread which represents |identifier_| when constructor #1 is used
// (null otherwise).
std::unique_ptr<WebSubThread> real_thread_;
// Binds |identifier_| to |message_loop| when constructor #2 is used (null
// otherwise).
std::unique_ptr<WebThreadImpl> fake_thread_;
DISALLOW_COPY_AND_ASSIGN(TestWebThread);
};
} // namespace web
#endif // IOS_WEB_PUBLIC_TEST_TEST_WEB_THREAD_H_