{"action":"created","comment":{"url":"https://api.github.com/repos/eocanha/webkit/pulls/comments/62199553","id":62199553,"diff_hunk":"@@ -299,142 +671,736 @@ static void webKitMediaSrcUriHandlerInit(gpointer gIface, gpointer)\n     iface->set_uri = webKitMediaSrcSetUri;\n }\n \n-namespace WebCore {\n-MediaSourceClientGStreamer::MediaSourceClientGStreamer(WebKitMediaSrc* src)\n-    : m_src(adoptGRef(static_cast<WebKitMediaSrc*>(gst_object_ref(src))))\n+inline static AtomicString getStreamTrackId(Stream* stream)\n+{\n+    if (stream->audioTrack)\n+        return stream->audioTrack->id();\n+    if (stream->videoTrack)\n+        return stream->videoTrack->id();\n+    GST_DEBUG(\"Stream has no audio and no video track\");\n+    return AtomicString();\n+}\n+\n+static Stream* getStreamByTrackId(WebKitMediaSrc* src, AtomicString trackIDString)\n+{\n+    // WebKitMediaSrc should be locked at this point.\n+    for (GList* streams = src->priv->streams; streams; streams = streams->next) {\n+        Stream* stream = static_cast<Stream*>(streams->data);\n+        if (stream->type != WebCore::Invalid && (\n+            (stream->audioTrack && stream->audioTrack->id() == trackIDString) ||\n+            (stream->videoTrack && stream->videoTrack->id() == trackIDString) ) )\n+            return stream;\n+    }\n+    return NULL;\n+}\n+\n+static Stream* getStreamBySourceBufferPrivate(WebKitMediaSrc* src, WebCore::SourceBufferPrivateGStreamer* sourceBufferPrivate)\n {\n+    for (GList* streams = src->priv->streams; streams; streams = streams->next) {\n+        Stream* stream = static_cast<Stream*>(streams->data);\n+        if (stream->sourceBuffer == sourceBufferPrivate)\n+            return stream;\n+    }\n+    return NULL;\n }\n \n-MediaSourceClientGStreamer::~MediaSourceClientGStreamer()\n+static Stream* getStreamByAppSrc(WebKitMediaSrc* src, GstElement* appsrc)\n {\n+    for (GList* streams = src->priv->streams; streams; streams = streams->next) {\n+        Stream* stream = static_cast<Stream*>(streams->data);\n+        if (stream->appsrc == appsrc)\n+            return stream;\n+    }\n+    return NULL;\n }\n \n-MediaSourcePrivate::AddStatus MediaSourceClientGStreamer::addSourceBuffer(PassRefPtr<SourceBufferPrivate> sourceBufferPrivate, const ContentType&)\n+static gboolean notifyReadyForMoreSamples(gpointer user_data)\n {\n-    WebKitMediaSrcPrivate* priv = m_src->priv;\n+    Stream* stream = static_cast<Stream*>(user_data);\n+    WebKitMediaSrc* webKitMediaSrc = WEBKIT_MEDIA_SRC(stream->parent);\n+    ASSERT(WEBKIT_IS_MEDIA_SRC(webKitMediaSrc));\n \n-    if (priv->noMorePads) {\n-        GST_ERROR_OBJECT(m_src.get(), \"Adding new source buffers after first data not supported yet\");\n-        return MediaSourcePrivate::NotSupported;\n+    WebCore::MediaPlayerPrivateGStreamerMSE* mediaPlayerPrivate = webKitMediaSrc->priv->mediaPlayerPrivate;\n+    if (mediaPlayerPrivate && !mediaPlayerPrivate->seeking()) {\n+        stream->sourceBuffer->notifyReadyForMoreSamples();\n     }\n \n-    GST_DEBUG_OBJECT(m_src.get(), \"State %d\", static_cast<int>(GST_STATE(m_src.get())));\n+    GST_OBJECT_LOCK(webKitMediaSrc);\n+    stream->notifyReadyForMoreSamplesTag = 0;\n+    GST_OBJECT_UNLOCK(webKitMediaSrc);\n \n-    GST_OBJECT_LOCK(m_src.get());\n+    return G_SOURCE_REMOVE;\n+}\n+\n+static gboolean seekNeedsDataMainThread (gpointer user_data)\n+{\n+    WebKitMediaSrc* webKitMediaSrc = static_cast<WebKitMediaSrc*>(user_data);\n+    ASSERT(WEBKIT_IS_MEDIA_SRC(webKitMediaSrc));\n+\n+    LOG_MEDIA_MESSAGE(\"Buffering needed before seek\");\n \n-    Source* source = g_new0(Source, 1);\n-    guint numberOfSources = g_list_length(priv->sources);\n-    GUniquePtr<gchar> srcName(g_strdup_printf(\"src%u\", numberOfSources));\n+    ASSERT(WTF::isMainThread());\n \n-    source->src = gst_element_factory_make(\"appsrc\", srcName.get());\n-    source->sourceBuffer = sourceBufferPrivate.get();\n+    GST_OBJECT_LOCK(webKitMediaSrc);\n+    MediaTime seekTime = webKitMediaSrc->priv->seekTime;\n+    WebCore::MediaPlayerPrivateGStreamerMSE* mediaPlayerPrivate = webKitMediaSrc->priv->mediaPlayerPrivate;\n+    GST_OBJECT_UNLOCK(webKitMediaSrc);\n \n-    GUniquePtr<gchar> padName(g_strdup_printf(\"src_%u\", numberOfSources));\n-    priv->sources = g_list_prepend(priv->sources, source);\n-    GST_OBJECT_UNLOCK(m_src.get());\n+    if (mediaPlayerPrivate==nullptr)\n+        return G_SOURCE_REMOVE;\n \n-    priv->haveAppsrc = source->src;\n+    for (GList* streams = webKitMediaSrc->priv->streams; streams; streams = streams->next) {\n+        Stream* stream = static_cast<Stream*>(streams->data);\n+        if (stream->type != WebCore::Invalid) {\n+            stream->sourceBuffer->setReadyForMoreSamples(true);\n+        }\n+    }\n \n-    gst_bin_add(GST_BIN(m_src.get()), source->src);\n-    GRefPtr<GstPad> pad = adoptGRef(gst_element_get_static_pad(source->src, \"src\"));\n-    GstPad* ghostPad = gst_ghost_pad_new_from_template(padName.get(), pad.get(), gst_static_pad_template_get(&srcTemplate));\n-    gst_pad_set_query_function(ghostPad, webKitMediaSrcQueryWithParent);\n-    gst_pad_set_active(ghostPad, TRUE);\n-    gst_element_add_pad(GST_ELEMENT(m_src.get()), ghostPad);\n+    if (mediaPlayerPrivate)\n+        mediaPlayerPrivate->notifySeekNeedsData(seekTime);\n \n-    gst_element_sync_state_with_parent(source->src);\n+    return G_SOURCE_REMOVE;\n+}\n \n-    return MediaSourcePrivate::Ok;\n+static void app_src_need_data (GstAppSrc *src, guint length, gpointer user_data)\n+{\n+    UNUSED_PARAM(length);\n+\n+    WebKitMediaSrc* webKitMediaSrc = static_cast<WebKitMediaSrc*>(user_data);\n+    ASSERT(WEBKIT_IS_MEDIA_SRC(webKitMediaSrc));\n+\n+    bool allAppSrcsNeedDataAfterSeek = false;\n+\n+    GST_OBJECT_LOCK(webKitMediaSrc);\n+    OnSeekDataAction appSrcSeekDataNextAction = webKitMediaSrc->priv->appSrcSeekDataNextAction;\n+    int numAppSrcs = g_list_length(webKitMediaSrc->priv->streams);\n+    Stream* appSrcStream = getStreamByAppSrc(webKitMediaSrc, GST_ELEMENT(src));\n+\n+    if (webKitMediaSrc->priv->appSrcSeekDataCount > 0) {\n+        if (appSrcStream && !appSrcStream->appSrcNeedDataFlag) {\n+            ++webKitMediaSrc->priv->appSrcNeedDataCount;\n+            appSrcStream->appSrcNeedDataFlag = true;\n+        }\n+        if (webKitMediaSrc->priv->appSrcSeekDataCount == numAppSrcs && webKitMediaSrc->priv->appSrcNeedDataCount == numAppSrcs) {\n+            LOG_MEDIA_MESSAGE(\"All need_datas completed\");\n+            allAppSrcsNeedDataAfterSeek = true;\n+            webKitMediaSrc->priv->appSrcSeekDataCount = 0;\n+            webKitMediaSrc->priv->appSrcNeedDataCount = 0;\n+            webKitMediaSrc->priv->appSrcSeekDataNextAction = Nothing;\n+\n+            for (GList* streams = webKitMediaSrc->priv->streams; streams; streams = streams->next) {\n+                Stream* stream = static_cast<Stream*>(streams->data);\n+                stream->appSrcNeedDataFlag = false;\n+            }\n+        }\n+    }\n+    GST_OBJECT_UNLOCK(webKitMediaSrc);\n+\n+    if (allAppSrcsNeedDataAfterSeek) {\n+        LOG_MEDIA_MESSAGE(\"All expected app_src_seek_data() and app_src_need_data() calls performed. Running next action (%d)\", static_cast<int>(appSrcSeekDataNextAction));\n+\n+        switch (appSrcSeekDataNextAction) {\n+        case MediaSourceSeekToTime:\n+            if (WTF::isMainThread())\n+                seekNeedsDataMainThread(user_data);\n+            else\n+                g_timeout_add(0, GSourceFunc(seekNeedsDataMainThread), user_data);\n+            break;\n+        case Nothing:\n+            break;\n+        }\n+    } else if (appSrcSeekDataNextAction == Nothing) {\n+        WTF::GMutexLocker<GMutex> lock(webKitMediaSrc->priv->streamMutex);\n+\n+        GST_OBJECT_LOCK(webKitMediaSrc);\n+        Stream* stream = getStreamByAppSrc(webKitMediaSrc, GST_ELEMENT(src));\n+        if (stream && stream->notifyReadyForMoreSamplesTag == 0 && stream->type != WebCore::Invalid) {\n+            stream->notifyReadyForMoreSamplesTag =\n+                g_timeout_add(0, GSourceFunc(notifyReadyForMoreSamples), stream);\n+        }\n+        GST_OBJECT_UNLOCK(webKitMediaSrc);\n+    }\n+}\n+\n+static void app_src_enough_data (GstAppSrc *src, gpointer user_data)\n+{\n+    ASSERT(WTF::isMainThread());\n+    WebKitMediaSrc* webKitMediaSrc = static_cast<WebKitMediaSrc*>(user_data);\n+    ASSERT(WEBKIT_IS_MEDIA_SRC(webKitMediaSrc));\n+    Stream* stream = getStreamByAppSrc(webKitMediaSrc, GST_ELEMENT(src));\n+    ASSERT(stream != NULL);\n+    ASSERT(stream->type != WebCore::Invalid);\n+    stream->sourceBuffer->setReadyForMoreSamples(false);\n+}\n+\n+static gboolean app_src_seek_data (GstAppSrc *src, guint64 offset, gpointer user_data)\n+{\n+    UNUSED_PARAM(src);\n+    UNUSED_PARAM(offset);\n+\n+    ASSERT(WTF::isMainThread());\n+\n+    WebKitMediaSrc* webKitMediaSrc = static_cast<WebKitMediaSrc*>(user_data);\n+\n+    ASSERT(WEBKIT_IS_MEDIA_SRC(webKitMediaSrc));\n+\n+    GST_OBJECT_LOCK(webKitMediaSrc);\n+    webKitMediaSrc->priv->appSrcSeekDataCount++;\n+    GST_OBJECT_UNLOCK(webKitMediaSrc);\n+\n+    return TRUE;\n+}\n+\n+// METRO FIXME: Use gst_app_src_push_sample() instead when we switch to the appropriate GStreamer version.\n+static GstFlowReturn push_sample(GstAppSrc* appsrc, GstSample* sample)\n+{\n+    GstBuffer *buffer;\n+    GstCaps *caps;\n+","path":"Source/WebCore/platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp","position":772,"original_position":772,"commit_id":"4d3b91fcfb52f19e52732033c73273f4ce0c1252","original_commit_id":"4d3b91fcfb52f19e52732033c73273f4ce0c1252","user":{"login":"calvaris","id":1021526,"avatar_url":"https://avatars.githubusercontent.com/u/1021526?v=3","gravatar_id":"","url":"https://api.github.com/users/calvaris","html_url":"https://github.com/calvaris","followers_url":"https://api.github.com/users/calvaris/followers","following_url":"https://api.github.com/users/calvaris/following{/other_user}","gists_url":"https://api.github.com/users/calvaris/gists{/gist_id}","starred_url":"https://api.github.com/users/calvaris/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/calvaris/subscriptions","organizations_url":"https://api.github.com/users/calvaris/orgs","repos_url":"https://api.github.com/users/calvaris/repos","events_url":"https://api.github.com/users/calvaris/events{/privacy}","received_events_url":"https://api.github.com/users/calvaris/received_events","type":"User","site_admin":false},"body":"Asterisks","created_at":"2016-05-05T15:01:28Z","updated_at":"2016-05-05T15:01:28Z","html_url":"https://github.com/eocanha/webkit/pull/1#discussion_r62199553","pull_request_url":"https://api.github.com/repos/eocanha/webkit/pulls/1","_links":{"self":{"href":"https://api.github.com/repos/eocanha/webkit/pulls/comments/62199553"},"html":{"href":"https://github.com/eocanha/webkit/pull/1#discussion_r62199553"},"pull_request":{"href":"https://api.github.com/repos/eocanha/webkit/pulls/1"}}},"pull_request":{"url":"https://api.github.com/repos/eocanha/webkit/pulls/1","id":68888898,"html_url":"https://github.com/eocanha/webkit/pull/1","diff_url":"https://github.com/eocanha/webkit/pull/1.diff","patch_url":"https://github.com/eocanha/webkit/pull/1.patch","issue_url":"https://api.github.com/repos/eocanha/webkit/issues/1","number":1,"state":"open","locked":false,"title":"Mse backport","user":{"login":"eocanha","id":6864279,"avatar_url":"https://avatars.githubusercontent.com/u/6864279?v=3","gravatar_id":"","url":"https://api.github.com/users/eocanha","html_url":"https://github.com/eocanha","followers_url":"https://api.github.com/users/eocanha/followers","following_url":"https://api.github.com/users/eocanha/following{/other_user}","gists_url":"https://api.github.com/users/eocanha/gists{/gist_id}","starred_url":"https://api.github.com/users/eocanha/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eocanha/subscriptions","organizations_url":"https://api.github.com/users/eocanha/orgs","repos_url":"https://api.github.com/users/eocanha/repos","events_url":"https://api.github.com/users/eocanha/events{/privacy}","received_events_url":"https://api.github.com/users/eocanha/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-05-04T16:09:56Z","updated_at":"2016-05-05T15:01:28Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ec8b027f58be6378cc3dbd649cc75fa687318bdd","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/eocanha/webkit/pulls/1/commits","review_comments_url":"https://api.github.com/repos/eocanha/webkit/pulls/1/comments","review_comment_url":"https://api.github.com/repos/eocanha/webkit/pulls/comments{/number}","comments_url":"https://api.github.com/repos/eocanha/webkit/issues/1/comments","statuses_url":"https://api.github.com/repos/eocanha/webkit/statuses/4d3b91fcfb52f19e52732033c73273f4ce0c1252","head":{"label":"eocanha:mse-backport-rebased-20160425-sq","ref":"mse-backport-rebased-20160425-sq","sha":"4d3b91fcfb52f19e52732033c73273f4ce0c1252","user":{"login":"eocanha","id":6864279,"avatar_url":"https://avatars.githubusercontent.com/u/6864279?v=3","gravatar_id":"","url":"https://api.github.com/users/eocanha","html_url":"https://github.com/eocanha","followers_url":"https://api.github.com/users/eocanha/followers","following_url":"https://api.github.com/users/eocanha/following{/other_user}","gists_url":"https://api.github.com/users/eocanha/gists{/gist_id}","starred_url":"https://api.github.com/users/eocanha/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eocanha/subscriptions","organizations_url":"https://api.github.com/users/eocanha/orgs","repos_url":"https://api.github.com/users/eocanha/repos","events_url":"https://api.github.com/users/eocanha/events{/privacy}","received_events_url":"https://api.github.com/users/eocanha/received_events","type":"User","site_admin":false},"repo":{"id":49714349,"name":"webkit","full_name":"eocanha/webkit","owner":{"login":"eocanha","id":6864279,"avatar_url":"https://avatars.githubusercontent.com/u/6864279?v=3","gravatar_id":"","url":"https://api.github.com/users/eocanha","html_url":"https://github.com/eocanha","followers_url":"https://api.github.com/users/eocanha/followers","following_url":"https://api.github.com/users/eocanha/following{/other_user}","gists_url":"https://api.github.com/users/eocanha/gists{/gist_id}","starred_url":"https://api.github.com/users/eocanha/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eocanha/subscriptions","organizations_url":"https://api.github.com/users/eocanha/orgs","repos_url":"https://api.github.com/users/eocanha/repos","events_url":"https://api.github.com/users/eocanha/events{/privacy}","received_events_url":"https://api.github.com/users/eocanha/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/eocanha/webkit","description":"Unofficial mirror of the WebKit SVN repository","fork":true,"url":"https://api.github.com/repos/eocanha/webkit","forks_url":"https://api.github.com/repos/eocanha/webkit/forks","keys_url":"https://api.github.com/repos/eocanha/webkit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eocanha/webkit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eocanha/webkit/teams","hooks_url":"https://api.github.com/repos/eocanha/webkit/hooks","issue_events_url":"https://api.github.com/repos/eocanha/webkit/issues/events{/number}","events_url":"https://api.github.com/repos/eocanha/webkit/events","assignees_url":"https://api.github.com/repos/eocanha/webkit/assignees{/user}","branches_url":"https://api.github.com/repos/eocanha/webkit/branches{/branch}","tags_url":"https://api.github.com/repos/eocanha/webkit/tags","blobs_url":"https://api.github.com/repos/eocanha/webkit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eocanha/webkit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eocanha/webkit/git/refs{/sha}","trees_url":"https://api.github.com/repos/eocanha/webkit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eocanha/webkit/statuses/{sha}","languages_url":"https://api.github.com/repos/eocanha/webkit/languages","stargazers_url":"https://api.github.com/repos/eocanha/webkit/stargazers","contributors_url":"https://api.github.com/repos/eocanha/webkit/contributors","subscribers_url":"https://api.github.com/repos/eocanha/webkit/subscribers","subscription_url":"https://api.github.com/repos/eocanha/webkit/subscription","commits_url":"https://api.github.com/repos/eocanha/webkit/commits{/sha}","git_commits_url":"https://api.github.com/repos/eocanha/webkit/git/commits{/sha}","comments_url":"https://api.github.com/repos/eocanha/webkit/comments{/number}","issue_comment_url":"https://api.github.com/repos/eocanha/webkit/issues/comments{/number}","contents_url":"https://api.github.com/repos/eocanha/webkit/contents/{+path}","compare_url":"https://api.github.com/repos/eocanha/webkit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eocanha/webkit/merges","archive_url":"https://api.github.com/repos/eocanha/webkit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eocanha/webkit/downloads","issues_url":"https://api.github.com/repos/eocanha/webkit/issues{/number}","pulls_url":"https://api.github.com/repos/eocanha/webkit/pulls{/number}","milestones_url":"https://api.github.com/repos/eocanha/webkit/milestones{/number}","notifications_url":"https://api.github.com/repos/eocanha/webkit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eocanha/webkit/labels{/name}","releases_url":"https://api.github.com/repos/eocanha/webkit/releases{/id}","deployments_url":"https://api.github.com/repos/eocanha/webkit/deployments","created_at":"2016-01-15T11:07:43Z","updated_at":"2016-01-15T09:28:48Z","pushed_at":"2016-05-04T16:09:58Z","git_url":"git://github.com/eocanha/webkit.git","ssh_url":"git@github.com:eocanha/webkit.git","clone_url":"https://github.com/eocanha/webkit.git","svn_url":"https://github.com/eocanha/webkit","homepage":"http://www.webkit.org/","size":7247872,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"eocanha:master","ref":"master","sha":"c3035c080aebda88b4e8078c87f43318dd2db953","user":{"login":"eocanha","id":6864279,"avatar_url":"https://avatars.githubusercontent.com/u/6864279?v=3","gravatar_id":"","url":"https://api.github.com/users/eocanha","html_url":"https://github.com/eocanha","followers_url":"https://api.github.com/users/eocanha/followers","following_url":"https://api.github.com/users/eocanha/following{/other_user}","gists_url":"https://api.github.com/users/eocanha/gists{/gist_id}","starred_url":"https://api.github.com/users/eocanha/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eocanha/subscriptions","organizations_url":"https://api.github.com/users/eocanha/orgs","repos_url":"https://api.github.com/users/eocanha/repos","events_url":"https://api.github.com/users/eocanha/events{/privacy}","received_events_url":"https://api.github.com/users/eocanha/received_events","type":"User","site_admin":false},"repo":{"id":49714349,"name":"webkit","full_name":"eocanha/webkit","owner":{"login":"eocanha","id":6864279,"avatar_url":"https://avatars.githubusercontent.com/u/6864279?v=3","gravatar_id":"","url":"https://api.github.com/users/eocanha","html_url":"https://github.com/eocanha","followers_url":"https://api.github.com/users/eocanha/followers","following_url":"https://api.github.com/users/eocanha/following{/other_user}","gists_url":"https://api.github.com/users/eocanha/gists{/gist_id}","starred_url":"https://api.github.com/users/eocanha/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eocanha/subscriptions","organizations_url":"https://api.github.com/users/eocanha/orgs","repos_url":"https://api.github.com/users/eocanha/repos","events_url":"https://api.github.com/users/eocanha/events{/privacy}","received_events_url":"https://api.github.com/users/eocanha/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/eocanha/webkit","description":"Unofficial mirror of the WebKit SVN repository","fork":true,"url":"https://api.github.com/repos/eocanha/webkit","forks_url":"https://api.github.com/repos/eocanha/webkit/forks","keys_url":"https://api.github.com/repos/eocanha/webkit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eocanha/webkit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eocanha/webkit/teams","hooks_url":"https://api.github.com/repos/eocanha/webkit/hooks","issue_events_url":"https://api.github.com/repos/eocanha/webkit/issues/events{/number}","events_url":"https://api.github.com/repos/eocanha/webkit/events","assignees_url":"https://api.github.com/repos/eocanha/webkit/assignees{/user}","branches_url":"https://api.github.com/repos/eocanha/webkit/branches{/branch}","tags_url":"https://api.github.com/repos/eocanha/webkit/tags","blobs_url":"https://api.github.com/repos/eocanha/webkit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eocanha/webkit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eocanha/webkit/git/refs{/sha}","trees_url":"https://api.github.com/repos/eocanha/webkit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eocanha/webkit/statuses/{sha}","languages_url":"https://api.github.com/repos/eocanha/webkit/languages","stargazers_url":"https://api.github.com/repos/eocanha/webkit/stargazers","contributors_url":"https://api.github.com/repos/eocanha/webkit/contributors","subscribers_url":"https://api.github.com/repos/eocanha/webkit/subscribers","subscription_url":"https://api.github.com/repos/eocanha/webkit/subscription","commits_url":"https://api.github.com/repos/eocanha/webkit/commits{/sha}","git_commits_url":"https://api.github.com/repos/eocanha/webkit/git/commits{/sha}","comments_url":"https://api.github.com/repos/eocanha/webkit/comments{/number}","issue_comment_url":"https://api.github.com/repos/eocanha/webkit/issues/comments{/number}","contents_url":"https://api.github.com/repos/eocanha/webkit/contents/{+path}","compare_url":"https://api.github.com/repos/eocanha/webkit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eocanha/webkit/merges","archive_url":"https://api.github.com/repos/eocanha/webkit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eocanha/webkit/downloads","issues_url":"https://api.github.com/repos/eocanha/webkit/issues{/number}","pulls_url":"https://api.github.com/repos/eocanha/webkit/pulls{/number}","milestones_url":"https://api.github.com/repos/eocanha/webkit/milestones{/number}","notifications_url":"https://api.github.com/repos/eocanha/webkit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eocanha/webkit/labels{/name}","releases_url":"https://api.github.com/repos/eocanha/webkit/releases{/id}","deployments_url":"https://api.github.com/repos/eocanha/webkit/deployments","created_at":"2016-01-15T11:07:43Z","updated_at":"2016-01-15T09:28:48Z","pushed_at":"2016-05-04T16:09:58Z","git_url":"git://github.com/eocanha/webkit.git","ssh_url":"git@github.com:eocanha/webkit.git","clone_url":"https://github.com/eocanha/webkit.git","svn_url":"https://github.com/eocanha/webkit","homepage":"http://www.webkit.org/","size":7247872,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/eocanha/webkit/pulls/1"},"html":{"href":"https://github.com/eocanha/webkit/pull/1"},"issue":{"href":"https://api.github.com/repos/eocanha/webkit/issues/1"},"comments":{"href":"https://api.github.com/repos/eocanha/webkit/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/eocanha/webkit/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/eocanha/webkit/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/eocanha/webkit/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/eocanha/webkit/statuses/4d3b91fcfb52f19e52732033c73273f4ce0c1252"}}}}