[cleanup] Remove Fuchsia minibrowser It is no longer used and depends on input APIs that are going away. Testing: build with --args use_prebuilt_webkit=false and logged in with Google. Change-Id: Idf255c71c4f025c0970c25a046fa6abb2aa045d0
diff --git a/Tools/CMakeLists.txt b/Tools/CMakeLists.txt index 3e00ce9..4b2edb8 100644 --- a/Tools/CMakeLists.txt +++ b/Tools/CMakeLists.txt
@@ -35,8 +35,6 @@ if (ENABLE_API_TESTS) add_subdirectory(TestWebKitAPI) endif () -elseif ("${PORT}" STREQUAL "Fuchsia") - add_subdirectory(MiniBrowser/fuchsia) endif () if (WIN32)
diff --git a/Tools/MiniBrowser/fuchsia/CMakeLists.txt b/Tools/MiniBrowser/fuchsia/CMakeLists.txt deleted file mode 100644 index 640ff34..0000000 --- a/Tools/MiniBrowser/fuchsia/CMakeLists.txt +++ /dev/null
@@ -1,63 +0,0 @@ -set(MINIBROWSER_DIR "${TOOLS_DIR}/MiniBrowser/fuchsia") - -FIND_LIBRARY(PIXMAN pixman-1) -FIND_LIBRARY(EXPAT expat) -FIND_LIBRARY(CURL curl) -FIND_LIBRARY(CRYPTO crypto) -FIND_LIBRARY(SSL ssl) -FIND_LIBRARY(XML xml2) -FIND_LIBRARY(ZLIB libz.so.1) - -set(MiniBrowser_SOURCES - ${MINIBROWSER_DIR}/main.cpp - ${MINIBROWSER_DIR}/FuchsiaCursor.cpp - ${MINIBROWSER_DIR}/FuchsiaInputHandler.cpp -) - -set(MiniBrowser_INCLUDE_DIRECTORIES - ${CMAKE_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/Source - "${WEBCORE_DIR}/platform/graphics/freetype" - "${WEBCORE_DIR}/platform/graphics/harfbuzz" - "${WEBCORE_DIR}/platform/graphics/opentype" - ${DERIVED_SOURCES_DIR} - ${DERIVED_SOURCES_DIR}/WebCore - ${DERIVED_SOURCES_DIR}/ForwardingHeaders - ${DERIVED_SOURCES_DIR}/ForwardingHeaders/JavaScriptCore - ${DERIVED_SOURCES_DIR}/ForwardingHeaders/WebCore - ${DERIVED_SOURCES_DIR}/ForwardingHeaders/WebKit - ${WTF_DIR} - ${WEBCORE_DIR} - ${JAVASCRIPTCORE_DIR} - ${FORWARDING_HEADERS_DIR} - ${MINIBROWSER_DIR} - ${CAIRO_INCLUDE_DIRS} - ${FREETYPE2_HEADER_DIR} - ${HARFBUZZ_INCLUDE_DIRS} -) - -link_directories("lib") - -set(MiniBrowser_LIBRARIES - JavaScriptCore - WebCore - hid - ${CMAKE_BINARY_DIR}/lib/libWebKitLegacy.a - ${PIXMAN} - ${CAIRO_LIBRARIES} - ${ENCHANT_LIBRARIES} - ${FREETYPE2_LIBRARIES} - ${HARFBUZZ_LIBRARIES} - ${LIBXML2_LIBRARIES} - ${SQLITE_LIBRARIES} - ${ZLIB_LIBRARIES} - ${CURL} - ${EXPAT} -) - -set(EXECUTABLE_NAME MiniBrowser) -set(PRODUCT_NAME MiniBrowser) - -include_directories(${MiniBrowser_INCLUDE_DIRECTORIES}) -add_executable(MiniBrowser ${MiniBrowser_SOURCES}) -target_link_libraries(MiniBrowser ${MiniBrowser_LIBRARIES})
diff --git a/Tools/MiniBrowser/fuchsia/FuchsiaCursor.cpp b/Tools/MiniBrowser/fuchsia/FuchsiaCursor.cpp deleted file mode 100644 index d83373b..0000000 --- a/Tools/MiniBrowser/fuchsia/FuchsiaCursor.cpp +++ /dev/null
@@ -1,72 +0,0 @@ -/* - * Copyright 2016 The Fuchsia Authors. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "FuchsiaCursor.h" - -#include "FuchsiaInputHandler.h" - -namespace Fuchsia { - -using namespace std; - -Cursor::Cursor() - : Cursor(1024, 768) -{ -} - -Cursor::Cursor(int maxX, int maxY) - : fMaxX(maxX) - , fMaxY(maxY) - , fX(0) - , fY(0) - , fButtons(0) -{ -} - -Cursor::ButtonActions Cursor::handleEvent(const MouseEvent& evt) -{ - ButtonActions actions; - fX += evt.fDeltaX; - fX = std::max(fX, 0); - fX = std::min(fX, fMaxX); - fY += evt.fDeltaY; - fY = std::max(fY, 0); - fY = std::min(fY, fMaxY); - bitset<8> newButtons(evt.fButtons); - for (int i = 0; i < kBitCount; ++i) { - if (newButtons[i] != fButtons[i]) { - if (newButtons[i]) { - actions[i] = ButtonAction::kDown; - } else { - actions[i] = ButtonAction::kUp; - } - } else { - actions[i] = ButtonAction::kNoChange; - } - } - fButtons = newButtons; - return actions; -} -}
diff --git a/Tools/MiniBrowser/fuchsia/FuchsiaCursor.h b/Tools/MiniBrowser/fuchsia/FuchsiaCursor.h deleted file mode 100644 index 86bccd1..0000000 --- a/Tools/MiniBrowser/fuchsia/FuchsiaCursor.h +++ /dev/null
@@ -1,63 +0,0 @@ -/* - * Copyright 2016 The Fuchsia Authors. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#pragma once - -#include <bitset> -#include <future> -#include <map> -#include <vector> - -#include <zircon/types.h> - -namespace Fuchsia { - -class MouseEvent; - -class Cursor { -public: - enum ButtonAction { kNoChange, - kDown, - kUp }; - typedef std::map<int, ButtonAction> ButtonActions; - Cursor(); - Cursor(int maxX, int maxY); - - ButtonActions handleEvent(const MouseEvent&); - - int getX() const { return fX; } - int getY() const { return fY; } - -private: - int fMaxX; - int fMaxY; - int fX; - int fY; - - constexpr static int kBitCount = 8; - - std::bitset<kBitCount> fButtons; -}; -}
diff --git a/Tools/MiniBrowser/fuchsia/FuchsiaInputHandler.cpp b/Tools/MiniBrowser/fuchsia/FuchsiaInputHandler.cpp deleted file mode 100644 index 08c52ca..0000000 --- a/Tools/MiniBrowser/fuchsia/FuchsiaInputHandler.cpp +++ /dev/null
@@ -1,283 +0,0 @@ -/* - * Copyright 2016 The Fuchsia Authors. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "FuchsiaInputHandler.h" - -#include <wtf/Assertions.h> - -#include <dirent.h> -#include <fcntl.h> -#include <hid/hid.h> -#include <hid/usages.h> -#include <zircon/device/device.h> -#include <zircon/device/input.h> -#include <zircon/syscalls.h> -#include <zircon/types.h> -#include <lib/fdio/io.h> -#include <stdlib.h> - -#include <iostream> -#include <sstream> -#include <thread> - -const char* kDevInput = "/dev/class/input"; - -namespace Fuchsia { - -using namespace std; - -#pragma mark - InputReportHandler - -InputReportHandler::InputReportHandler(int descriptor, const std::string& deviceName) - : fDescriptor(descriptor) - , fName(deviceName) -{ -} - -InputReportHandler::~InputReportHandler() -{ -} - -ssize_t InputReportHandler::openHandle() -{ - zx_handle_t handle; - ssize_t ret = fdio_ioctl(fDescriptor, IOCTL_DEVICE_GET_EVENT_HANDLE, nullptr, 0, - &handle, sizeof(handle)); - if (ret >= 0) { - fHandle = handle; - } - return ret; -} - -void InputReportHandler::checkForEvents(EventList& events) -{ - size_t max_report_len = 0; - int rc = fdio_ioctl(fDescriptor, IOCTL_INPUT_GET_MAX_REPORTSIZE, NULL, 0, &max_report_len, sizeof(max_report_len)); - if (rc < 0) { - WTFLogAlways("hid: could not get max report size from %d: %d", fDescriptor, rc); - } - - vector<char> buffer(max_report_len); - - int r = read(fDescriptor, &buffer[0], max_report_len); - handleReport(r, &buffer[0], events); -} - -#pragma mark - MouseReportHandler - -MouseReportHandler::MouseReportHandler(int descriptor, const std::string& deviceName) - : InputReportHandler(descriptor, deviceName) -{ -} - -void MouseReportHandler::handleReport(size_t byteLength, const char* reportData, EventList& events) -{ - const boot_mouse_report_t* mouseReport = reinterpret_cast<const boot_mouse_report_t*>(reportData); - while (byteLength > 0) { - EventPtr eventP(new MouseEvent(fDescriptor, mouseReport->rel_x, mouseReport->rel_y, mouseReport->buttons)); - events.push_back(eventP); - byteLength -= 3; - mouseReport += 1; - } -} - -#pragma mark - KeyboardReportHandler - -KeyboardReportHandler::KeyboardReportHandler(int descriptor, const std::string& deviceName) - : InputReportHandler(descriptor, deviceName) -{ -} - -void KeyboardReportHandler::handleReport(size_t byteLength, const char* reportData, EventList& events) -{ - const uint8_t* keyboardReport = reinterpret_cast<const uint8_t*>(reportData); - uint8_t* keyboardReportWriteableSigh = const_cast<uint8_t*>(keyboardReport); - uint8_t keycode; - hid_keys_t newKeyState; - hid_keys_t keyDelta; - hid_kbd_parse_report(keyboardReportWriteableSigh, &newKeyState); - hid_kbd_pressed_keys(&fKeyState, &newKeyState, &keyDelta); - hid_for_every_key(&keyDelta, keycode) { - EventPtr eventP(new KeyEvent(fDescriptor, keycode, true)); - events.push_back(eventP); - } - hid_kbd_released_keys(&fKeyState, &newKeyState, &keyDelta); - hid_for_every_key(&keyDelta, keycode) { - EventPtr eventP(new KeyEvent(fDescriptor, keycode, false)); - events.push_back(eventP); - } - fKeyState = newKeyState; -} - -#pragma mark - InputHandler - -InputHandler::InputHandler() -{ -} - -static int get_hid_protocol(int fd, const char* name) -{ - int proto = 0; - int rc = fdio_ioctl(fd, IOCTL_INPUT_GET_PROTOCOL, NULL, 0, &proto, sizeof(proto)); - if (rc < 0) { - WTFLogAlways("hid: could not get protocol from %s (status=%d)\n", name, rc); - } else { - WTFLogAlways("hid: %s proto=%d\n", name, proto); - } - return proto; -} - -static void checkForEvents(int fd, EventList& events) -{ - size_t max_report_len = 0; - int rc = fdio_ioctl(fd, IOCTL_INPUT_GET_MAX_REPORTSIZE, NULL, 0, &max_report_len, sizeof(max_report_len)); - if (rc < 0) { - WTFLogAlways("hid: could not get max report size from %d: %d", fd, rc); - return; - } - - vector<char> buffer(max_report_len); - - int proto = 0; - rc = fdio_ioctl(fd, IOCTL_INPUT_GET_PROTOCOL, NULL, 0, &proto, sizeof(proto)); - if (rc < 0) { - WTFLogAlways("hid: could not get protocol (status=%d)", rc); - return; - } - - int r = read(fd, &buffer[0], max_report_len); - - if (proto == INPUT_PROTO_MOUSE) { - boot_mouse_report_t* mouseReport = reinterpret_cast<boot_mouse_report_t*>(&buffer[0]); - while (r > 0) { - EventPtr eventP(new MouseEvent(fd, mouseReport->rel_x, mouseReport->rel_y, mouseReport->buttons)); - events.push_back(eventP); - r -= 3; - mouseReport += 1; - } - } else if (proto == INPUT_PROTO_KBD) { - boot_kbd_report* kbdReport = reinterpret_cast<boot_kbd_report*>(&buffer[0]); - while (r > 0) { - WTFLogAlways("keyboard action"); - r -= sizeof(boot_kbd_report); - kbdReport += 1; - } - } -} - -static EventList waitForEvents(vector<InputReportHandlerPtr> reportHandlers) -{ - EventList events; - vector<zx_wait_item_t> items; - for (const auto& oneReportHandler : reportHandlers) { - zx_wait_item_t item = { oneReportHandler->handle(), DEVICE_SIGNAL_READABLE, 0 }; - items.push_back(item); - } - zx_status_t result = zx_object_wait_many(&items[0], items.size(), - ZX_TIME_INFINITE); - if (result == ZX_OK) { - int index = 0; - for (const auto& oneItem : items) { - if (oneItem.pending & DEVICE_SIGNAL_READABLE) { - auto& oneReportHandler(reportHandlers[index]); - oneReportHandler->checkForEvents(events); - } - index += 1; - } - } - return events; -} - -void InputHandler::openDevices() -{ - struct dirent* de; - DIR* dir = opendir(kDevInput); - if (!dir) { - WTFLogAlways("hid: error opening %s", kDevInput); - return; - } - - while ((de = readdir(dir)) != NULL) { - ostringstream oss; - oss << kDevInput << "/" << de->d_name; - string dname(oss.str()); - int fd = open(dname.c_str(), O_RDONLY); - if (fd >= 0) { - int proto = get_hid_protocol(fd, dname.c_str()); - InputReportHandlerPtr p; - if (proto == INPUT_PROTO_MOUSE) { - p.reset(new MouseReportHandler(fd, dname)); - } else if (proto == INPUT_PROTO_KBD) { - p.reset(new KeyboardReportHandler(fd, dname)); - } else { - close(fd); - } - - if (p) { - if (p->openHandle() >= 0) { - fReportHandlers.push_back(p); - } - } - } - } - - startReaderThread(); -} - -bool InputHandler::hasEvents() -{ - std::lock_guard<std::mutex> lock(fEventsMutex); - bool v = !fEvents.empty(); - return v; -} - -EventList InputHandler::getPendingEvents() -{ - std::lock_guard<std::mutex> lock(fEventsMutex); - EventList pending(fEvents); - fEvents.clear(); - return pending; -} - -void InputHandler::addEvents(const EventList& newEvents) -{ - std::lock_guard<std::mutex> lock(fEventsMutex); - fEvents.insert(std::end(fEvents), std::begin(newEvents), std::end(newEvents)); -} - -void InputHandler::readEvents() -{ - while(1) { - EventList newEvents = waitForEvents(fReportHandlers); - addEvents(newEvents); - } -} - -void InputHandler::startReaderThread() -{ - fEventReaderThread = std::thread(&InputHandler::readEvents,this); -} - -}
diff --git a/Tools/MiniBrowser/fuchsia/FuchsiaInputHandler.h b/Tools/MiniBrowser/fuchsia/FuchsiaInputHandler.h deleted file mode 100644 index 7003148..0000000 --- a/Tools/MiniBrowser/fuchsia/FuchsiaInputHandler.h +++ /dev/null
@@ -1,168 +0,0 @@ -/* - * Copyright 2016 The Fuchsia Authors. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#pragma once - -#include <wtf/Noncopyable.h> - -#include <hid/hid.h> - -#include <future> -#include <map> -#include <string> -#include <vector> - -#include <zircon/types.h> - -namespace Fuchsia { - -#pragma mark - Event - -class Event { -public: - enum Type { - kMouse, - kKey - }; - - Type type() const { return fType; } - int eventSource() const { return fEventSource; } - -protected: - Event(Type type, int eventSource) - : fType(type) - , fEventSource(eventSource) - { - } - - virtual ~Event() {} - -private: - Type fType; - int fEventSource; -}; - -typedef std::shared_ptr<Event> EventPtr; -typedef std::vector<EventPtr> EventList; - -#pragma mark - MouseEvent - -class MouseEvent : public Event { -public: - MouseEvent(int fd, int x, int y, int buttons) - : Event(kMouse, fd) - , fDeltaX(x) - , fDeltaY(y) - , fButtons(buttons) - { - } - - int fDeltaX; - int fDeltaY; - int fButtons; -}; - -#pragma mark - KeyEvent - -class KeyEvent : public Event { -public: - KeyEvent(int fd, uint8_t keyCode, bool pressed) - : Event(kKey, fd) - , fKeyCode(keyCode) - , fPressed(pressed) - { - } - - uint8_t keycode() const { return fKeyCode; } - bool pressed() const { return fPressed; } - -private: - uint8_t fKeyCode; - bool fPressed; -}; - -#pragma mark - InputReportHandler - - -class InputReportHandler { -public: - ssize_t openHandle(); - - void checkForEvents(EventList&); - - int descriptor() const { return fDescriptor; } - zx_handle_t handle() const { return fHandle; } - -protected: - InputReportHandler(int descriptor, const std::string& deviceName); - virtual ~InputReportHandler(); - - virtual void handleReport(size_t byteLength, const char* reportData, EventList& events) = 0; - - int fDescriptor; - std::string fName; - zx_handle_t fHandle = { ZX_HANDLE_INVALID }; -}; - -typedef std::shared_ptr<InputReportHandler> InputReportHandlerPtr; - -class MouseReportHandler : public InputReportHandler { -public: - MouseReportHandler(int descriptor, const std::string& deviceName); - void handleReport(size_t byteLength, const char* reportData, EventList& events) override; -}; - -class KeyboardReportHandler : public InputReportHandler { -public: - KeyboardReportHandler(int descriptor, const std::string& deviceName); - void handleReport(size_t byteLength, const char* reportData, EventList& events) override; - -private: - hid_keys_t fKeyState = {}; -}; - -class InputHandler { - WTF_MAKE_NONCOPYABLE(InputHandler); - -public: - InputHandler(); - - void openDevices(); - - bool hasEvents(); - EventList getPendingEvents(); - void addEvents(const EventList& newEvents); - -private: - void startReaderThread(); - void readEvents(); - - std::vector<InputReportHandlerPtr> fReportHandlers; - EventList fEvents; - std::mutex fEventsMutex; - std::thread fEventReaderThread; -}; - -}
diff --git a/Tools/MiniBrowser/fuchsia/main.cpp b/Tools/MiniBrowser/fuchsia/main.cpp deleted file mode 100644 index ac52649..0000000 --- a/Tools/MiniBrowser/fuchsia/main.cpp +++ /dev/null
@@ -1,264 +0,0 @@ -/* - * Copyright 2016 The Fuchsia Authors. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "cmakeconfig.h" - -#include <algorithm> -#include <chrono> -#include <iostream> -#include <map> - -#include <cairo/cairo.h> - -#include <fcntl.h> -#include <math.h> - -#include <assert.h> -#include <dirent.h> -#include <hid/hid.h> -#include <hid/usages.h> -#include <zircon/device/console.h> -#include <zircon/device/display.h> -#include <zircon/pixelformat.h> -#include <zircon/process.h> -#include <zircon/syscalls.h> -#include <zircon/types.h> -#include <lib/fdio/io.h> -#include <stdlib.h> -#include <sys/stat.h> - -#include <WebKit/fuchsia/WebView.h> - -#include "FuchsiaCursor.h" -#include "FuchsiaInputHandler.h" - -using namespace WebCore; - -using std::endl; -using std::cout; -using std::cerr; - -using Fuchsia::Event; -using Fuchsia::MouseEvent; -using Fuchsia::KeyEvent; - -#define USE_INPUT 1 - -constexpr float kMinimumZoomMultiplier = 0.5f; -constexpr float kMaximumZoomMultiplier = 3.0f; -constexpr float kZoomMultiplierRatio = 1.2f; - -// TODO: replace the hard coded device 000 with some method of getting -// the first device. -constexpr char kVirtualConsole[] = "/dev/class/framebuffer/000"; - -int main(int argc, char** argv) -{ - std::string urlToOpen = "file:///system/docs/input.html"; - - if (argc > 1) { - urlToOpen = argv[1]; - if (urlToOpen[0] == '/') { - urlToOpen = "file://" + urlToOpen; - } - } - - cout << "Welcome to MiniBrowser" << endl; - - int fd = open(kVirtualConsole, O_RDWR); - if (fd < 0) { - cout << "Failed to open frame buffer:" << errno << endl; - return -1; - } - - ssize_t result = fdio_ioctl(fd, IOCTL_CONSOLE_SET_ACTIVE_VC, NULL, 0, NULL, 0); - if (result < 0) { - cout << "could not set active console: " << result << endl; - cout << "press f1/f2 to switch consoles" << endl; - } - - ioctl_display_get_fb_t frameBuffer; - result = fdio_ioctl(fd, IOCTL_DISPLAY_GET_FB, nullptr, 0, &frameBuffer, - sizeof(frameBuffer)); - - if (result < 0) { - cout << "DISPLAY_OP_GET_FB failed."; - close(fd); - return -1; - } - -#if 1 - uint32_t beFull = 1; - ssize_t resultFs = fdio_ioctl(fd, IOCTL_DISPLAY_SET_FULLSCREEN, &beFull, sizeof(beFull), NULL, 0); - if (resultFs < 0) { - cout << "could not set full screen: " << resultFs << endl; - } -#endif - - size_t rowbytes = frameBuffer.info.stride * frameBuffer.info.pixelsize; - size_t size = rowbytes * frameBuffer.info.height; - - uintptr_t buffer = 0; - - zx_status_t status = zx_vmar_map(zx_vmar_root_self(), - ZX_VM_PERM_READ | ZX_VM_PERM_WRITE, 0, frameBuffer.vmo, 0, size, &buffer); - - if (status < 0) { - cout << "Cannot map frame buffer " << status << endl; - return -1; - } - - auto cursorSurface = cairo_image_surface_create_from_png("/system/docs/cursor32.png"); - int w = cairo_image_surface_get_width(cursorSurface); - int h = cairo_image_surface_get_height(cursorSurface); - cout << "cursor size is " << w << ", " << h << endl; - - cairo_format_t format = CAIRO_FORMAT_INVALID; - switch (frameBuffer.info.format) { - case ZX_PIXEL_FORMAT_RGB_565: - format = CAIRO_FORMAT_RGB16_565; - break; - case ZX_PIXEL_FORMAT_RGB_x888: - format = CAIRO_FORMAT_RGB24; - break; - case ZX_PIXEL_FORMAT_ARGB_8888: - format = CAIRO_FORMAT_ARGB32; - break; - case ZX_PIXEL_FORMAT_MONO_8: - format = CAIRO_FORMAT_A8; - break; - default: - cout << "Unsupported pixel format " << frameBuffer.info.format << endl; - return -1; - } - -#if USE_INPUT - Fuchsia::InputHandler inputHandler; - inputHandler.openDevices(); - std::map<int, Fuchsia::Cursor> cursors; -#endif - - mkdir("/data/web_view", 0777); - - WebView webView; - webView.setup(reinterpret_cast<unsigned char*>(buffer), frameBuffer.info.format, frameBuffer.info.width, frameBuffer.info.height, rowbytes); - webView.setURL(urlToOpen); - - webView.setFocused(true); - webView.setVisible(true); - bool shiftDown = false; - bool controlDown = false; - float webScale = 1.0; - - while (true) { -#if USE_INPUT - if (inputHandler.hasEvents()) { - auto events = inputHandler.getPendingEvents(); - for (const auto& oneEvent : events) { - if (oneEvent->type() == Event::kMouse) { - MouseEvent* mouseEvent = static_cast<MouseEvent*>(oneEvent.get()); - auto cursorP = cursors.find(mouseEvent->eventSource()); - if (cursorP == cursors.end()) { - auto insertResult = cursors.insert(std::make_pair(mouseEvent->eventSource(), - Fuchsia::Cursor(frameBuffer.info.width, frameBuffer.info.height))); - cursorP = insertResult.first; - } - auto actions = cursorP->second.handleEvent(*mouseEvent); - for (const auto& actionPair : actions) { - if (actionPair.first == 0) { - if (actionPair.second == Fuchsia::Cursor::ButtonAction::kDown) { - webView.handleMouseEvent(cursorP->second.getX(), cursorP->second.getY(), WebView::kMouseDown); - } else if (actionPair.second == Fuchsia::Cursor::ButtonAction::kUp) { - webView.handleMouseEvent(cursorP->second.getX(), cursorP->second.getY(), WebView::kMouseUp); - } else { - webView.handleMouseEvent(cursorP->second.getX(), cursorP->second.getY(), WebView::kMouseMoved); - } - } - } - } else if (oneEvent->type() == Event::kKey) { - KeyEvent* keyEvent = static_cast<KeyEvent*>(oneEvent.get()); - uint8_t keycode = keyEvent->keycode(); - bool pressed = keyEvent->pressed(); - if (keycode == HID_USAGE_KEY_LEFT_SHIFT || keycode == HID_USAGE_KEY_RIGHT_SHIFT) { - shiftDown = pressed; - } else if (keycode == HID_USAGE_KEY_LEFT_CTRL || keycode == HID_USAGE_KEY_RIGHT_CTRL) { - controlDown = pressed; - } - if (controlDown && keycode == HID_USAGE_KEY_C) { - cout << "Exit requested." << endl; - exit(0); - } - uint8_t ch = hid_map_key(keycode, shiftDown, qwerty_map); - if (pressed && controlDown && ch == '+') { - float newScale = webScale * kZoomMultiplierRatio; - if (newScale < kMaximumZoomMultiplier) { - webScale = newScale; - webView.setPageAndTextZoomFactors(webScale, 1); - } - } else if (pressed && controlDown && ch == '-') { - float newScale = webScale / kZoomMultiplierRatio; - if (newScale > kMinimumZoomMultiplier) { - webScale = newScale; - webView.setPageAndTextZoomFactors(webScale, 1); - } - } else if (pressed && controlDown && keycode == HID_USAGE_KEY_LEFTBRACE) { - webView.goBack(); - } else if (pressed && controlDown && keycode == HID_USAGE_KEY_RIGHTBRACE) { - webView.goForward(); - } else if (pressed && controlDown && keycode == HID_USAGE_KEY_R) { - webView.reload(); - } else if (pressed && controlDown && keycode == HID_USAGE_KEY_D) { - webView.deleteAllCookies(); - } else { - bool handled = webView.handleKeyEvent(keycode, ch, pressed, false); - if (!handled) { - if (keycode == HID_USAGE_KEY_DOWN) { - webView.scrollDownOneLine(); - } else if (keycode == HID_USAGE_KEY_UP) { - webView.scrollUpOneLine(); - } - } - } - } - } - } -#endif - webView.iterateEventLoop(); - webView.layoutAndPaint(); -#if USE_INPUT - for (const auto& cursor : cursors) { - cairo_set_source_surface(webView.cairoContext(), cursorSurface, cursor.second.getX(), cursor.second.getY()); - cairo_paint(webView.cairoContext()); - } -#endif - result = fdio_ioctl(fd, IOCTL_DISPLAY_FLUSH_FB, nullptr, 0, nullptr, 0); - if (result < 0) { - cout << "IOCTL_DISPLAY_FLUSH_FB failed."; - close(fd); - return -1; - } - } - return 0; -}