| 949 | DISTRHO_SAFE_ASSERT_RETURN(NAME != nullptr, false); |
| 950 | |
| 951 | static int web_wake_idle(void* const ptr) |
| 952 | { |
| 953 | WebViewRingBuffer* const shmptr = static_cast<WebViewRingBuffer*>(ptr); |
| 954 | |
| 955 | RingBufferControl<WebViewSharedBuffer> rbctrl; |
| 956 | rbctrl.setRingBuffer(&shmptr->client, false); |
| 957 | |
| 958 | uint32_t size = 0; |
| 959 | void* buffer = nullptr; |
| 960 | |
| 961 | while (rbctrl.isDataAvailableForReading()) |
| 962 | { |
| 963 | switch (rbctrl.readUInt()) |
| 964 | { |
| 965 | case kWebViewMessageEvaluateJS: |
| 966 | if (const uint32_t len = rbctrl.readUInt()) |
| 967 | { |
| 968 | if (len > size) |
| 969 | { |
| 970 | size = len; |
| 971 | buffer = realloc(buffer, len); |
| 972 | |
| 973 | if (buffer == nullptr) |
| 974 | { |
| 975 | d_stderr("client kWebViewMessageEvaluateJS out of memory, abort!"); |
| 976 | abort(); |
| 977 | } |
| 978 | } |
| 979 | |
| 980 | if (rbctrl.readCustomData(buffer, len)) |
| 981 | { |
| 982 | d_debug("client kWebViewMessageEvaluateJS -> '%s'", static_cast<char*>(buffer)); |
| 983 | webFramework->evaluate(static_cast<char*>(buffer)); |
| 984 | continue; |
| 985 | } |
| 986 | } |
| 987 | break; |
| 988 | case kWebViewMessageReload: |
| 989 | d_debug("client kWebViewMessageReload"); |
| 990 | webFramework->reload(); |
| 991 | continue; |
| 992 | } |
| 993 | |
| 994 | d_stderr("client ringbuffer data race, abort!"); |
| 995 | abort(); |
| 996 | } |
| 997 | |
| 998 | free(buffer); |
| 999 | return 0; |
| 1000 | } |
| 1001 | |
| 1002 | // ----------------------------------------------------------------------------------------------------------- |
| 1003 | // gtk3 variant |
no test coverage detected