// Copyright 2013 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/shell/renderer/test_runner/MockWebMIDIAccessor.h"

#include "content/shell/renderer/test_runner/TestInterfaces.h"
#include "content/shell/renderer/test_runner/WebTestDelegate.h"
#include "content/shell/renderer/test_runner/test_runner.h"
#include "content/shell/renderer/test_runner/web_test_runner.h"
#include "third_party/WebKit/public/platform/WebMIDIAccessorClient.h"

using namespace blink;

namespace content {

namespace {

class DidStartSessionTask : public WebMethodTask<MockWebMIDIAccessor> {
public:
    DidStartSessionTask(MockWebMIDIAccessor* object, blink::WebMIDIAccessorClient* client, bool result)
        : WebMethodTask<MockWebMIDIAccessor>(object)
        , m_client(client)
        , m_result(result)
    {
    }

    virtual void runIfValid() OVERRIDE
    {
        m_client->didStartSession(m_result, "InvalidStateError", "");
    }

private:
    blink::WebMIDIAccessorClient* m_client;
    bool m_result;
};

}  // namespace

MockWebMIDIAccessor::MockWebMIDIAccessor(blink::WebMIDIAccessorClient* client, TestInterfaces* interfaces)
    : m_client(client)
    , m_interfaces(interfaces)
{
}

MockWebMIDIAccessor::~MockWebMIDIAccessor()
{
}

void MockWebMIDIAccessor::startSession()
{
    // Add a mock input and output port.
    m_client->didAddInputPort("MockInputID", "MockInputManufacturer", "MockInputName", "MockInputVersion");
    m_client->didAddOutputPort("MockOutputID", "MockOutputManufacturer", "MockOutputName", "MockOutputVersion");
    m_interfaces->delegate()->postTask(new DidStartSessionTask(this, m_client, m_interfaces->testRunner()->midiAccessorResult()));
}

}  // namespace content