{"action":"created","comment":{"url":"https://api.github.com/repos/mozilla/firefox-ios/pulls/comments/25457001","id":25457001,"diff_hunk":"@@ -34,14 +36,11 @@ public struct BookmarkRoots {\n /**\n  * The immutable base interface for bookmarks and folders.\n  */\n-@objc public protocol BookmarkNode {\n-    var guid: String { get }\n-    var title: String { get }\n-    var icon: UIImage { get }\n-}\n-\n-@objc public protocol Bookmark : BookmarkNode {\n-    var url: String! { get }\n+public class BookmarkNode {\n+    public var id: Int? = nil\n+    public var guid: String = \"\"\n+    public var title: String = \"\"","path":"Storage/Storage/Bookmarks.swift","position":29,"original_position":29,"commit_id":"40f8085c1e5ae5b2d21de4397c1ee6e77bd7d5c6","original_commit_id":"40f8085c1e5ae5b2d21de4397c1ee6e77bd7d5c6","user":{"login":"thebnich","id":1093266,"avatar_url":"https://avatars.githubusercontent.com/u/1093266?v=3","gravatar_id":"","url":"https://api.github.com/users/thebnich","html_url":"https://github.com/thebnich","followers_url":"https://api.github.com/users/thebnich/followers","following_url":"https://api.github.com/users/thebnich/following{/other_user}","gists_url":"https://api.github.com/users/thebnich/gists{/gist_id}","starred_url":"https://api.github.com/users/thebnich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thebnich/subscriptions","organizations_url":"https://api.github.com/users/thebnich/orgs","repos_url":"https://api.github.com/users/thebnich/repos","events_url":"https://api.github.com/users/thebnich/events{/privacy}","received_events_url":"https://api.github.com/users/thebnich/received_events","type":"User","site_admin":false},"body":"Why is `title` _not_ optional? Semanitcally, an empty string means it has a title, but that title is an empty string. `nil` means it has no title. Shouldn't we prefer the latter?","created_at":"2015-02-26T19:36:40Z","updated_at":"2015-02-26T19:36:40Z","html_url":"https://github.com/mozilla/firefox-ios/pull/173#discussion_r25457001","pull_request_url":"https://api.github.com/repos/mozilla/firefox-ios/pulls/173","_links":{"self":{"href":"https://api.github.com/repos/mozilla/firefox-ios/pulls/comments/25457001"},"html":{"href":"https://github.com/mozilla/firefox-ios/pull/173#discussion_r25457001"},"pull_request":{"href":"https://api.github.com/repos/mozilla/firefox-ios/pulls/173"}}},"pull_request":{"url":"https://api.github.com/repos/mozilla/firefox-ios/pulls/173","id":29840145,"html_url":"https://github.com/mozilla/firefox-ios/pull/173","diff_url":"https://github.com/mozilla/firefox-ios/pull/173.diff","patch_url":"https://github.com/mozilla/firefox-ios/pull/173.patch","issue_url":"https://api.github.com/repos/mozilla/firefox-ios/issues/173","number":173,"state":"open","locked":false,"title":"Bug 1135180 - Bookmark icons","user":{"login":"wesj","id":1117644,"avatar_url":"https://avatars.githubusercontent.com/u/1117644?v=3","gravatar_id":"","url":"https://api.github.com/users/wesj","html_url":"https://github.com/wesj","followers_url":"https://api.github.com/users/wesj/followers","following_url":"https://api.github.com/users/wesj/following{/other_user}","gists_url":"https://api.github.com/users/wesj/gists{/gist_id}","starred_url":"https://api.github.com/users/wesj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wesj/subscriptions","organizations_url":"https://api.github.com/users/wesj/orgs","repos_url":"https://api.github.com/users/wesj/repos","events_url":"https://api.github.com/users/wesj/events{/privacy}","received_events_url":"https://api.github.com/users/wesj/received_events","type":"User","site_admin":false},"body":"This adds a join-table for bookmarks <-> favicons. The table is smart enough to query history for a favicon if you don't provide one. It adds the entry to the bookmarks and favicons table, and then updates it own bookmarkId <-> faviconId mapping. I also added a test (basically a copy of the History test we have for the same thing).\r\n\r\nI also (after a long rabbit hole) removed the files: argument from the Favicon constructor which isn't used anymore here. I left that in since its nice cleanup.","created_at":"2015-02-23T20:00:20Z","updated_at":"2015-02-26T19:36:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b50923639a9a49022370adf7071fb4bfddb0b5cf","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/mozilla/firefox-ios/pulls/173/commits","review_comments_url":"https://api.github.com/repos/mozilla/firefox-ios/pulls/173/comments","review_comment_url":"https://api.github.com/repos/mozilla/firefox-ios/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mozilla/firefox-ios/issues/173/comments","statuses_url":"https://api.github.com/repos/mozilla/firefox-ios/statuses/40f8085c1e5ae5b2d21de4397c1ee6e77bd7d5c6","head":{"label":"wesj:bookmarkIcons","ref":"bookmarkIcons","sha":"40f8085c1e5ae5b2d21de4397c1ee6e77bd7d5c6","user":{"login":"wesj","id":1117644,"avatar_url":"https://avatars.githubusercontent.com/u/1117644?v=3","gravatar_id":"","url":"https://api.github.com/users/wesj","html_url":"https://github.com/wesj","followers_url":"https://api.github.com/users/wesj/followers","following_url":"https://api.github.com/users/wesj/following{/other_user}","gists_url":"https://api.github.com/users/wesj/gists{/gist_id}","starred_url":"https://api.github.com/users/wesj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wesj/subscriptions","organizations_url":"https://api.github.com/users/wesj/orgs","repos_url":"https://api.github.com/users/wesj/repos","events_url":"https://api.github.com/users/wesj/events{/privacy}","received_events_url":"https://api.github.com/users/wesj/received_events","type":"User","site_admin":false},"repo":{"id":27951196,"name":"firefox-ios-1","full_name":"wesj/firefox-ios-1","owner":{"login":"wesj","id":1117644,"avatar_url":"https://avatars.githubusercontent.com/u/1117644?v=3","gravatar_id":"","url":"https://api.github.com/users/wesj","html_url":"https://github.com/wesj","followers_url":"https://api.github.com/users/wesj/followers","following_url":"https://api.github.com/users/wesj/following{/other_user}","gists_url":"https://api.github.com/users/wesj/gists{/gist_id}","starred_url":"https://api.github.com/users/wesj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wesj/subscriptions","organizations_url":"https://api.github.com/users/wesj/orgs","repos_url":"https://api.github.com/users/wesj/repos","events_url":"https://api.github.com/users/wesj/events{/privacy}","received_events_url":"https://api.github.com/users/wesj/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/wesj/firefox-ios-1","description":"Firefox for iOS","fork":true,"url":"https://api.github.com/repos/wesj/firefox-ios-1","forks_url":"https://api.github.com/repos/wesj/firefox-ios-1/forks","keys_url":"https://api.github.com/repos/wesj/firefox-ios-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/wesj/firefox-ios-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/wesj/firefox-ios-1/teams","hooks_url":"https://api.github.com/repos/wesj/firefox-ios-1/hooks","issue_events_url":"https://api.github.com/repos/wesj/firefox-ios-1/issues/events{/number}","events_url":"https://api.github.com/repos/wesj/firefox-ios-1/events","assignees_url":"https://api.github.com/repos/wesj/firefox-ios-1/assignees{/user}","branches_url":"https://api.github.com/repos/wesj/firefox-ios-1/branches{/branch}","tags_url":"https://api.github.com/repos/wesj/firefox-ios-1/tags","blobs_url":"https://api.github.com/repos/wesj/firefox-ios-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/wesj/firefox-ios-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/wesj/firefox-ios-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/wesj/firefox-ios-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/wesj/firefox-ios-1/statuses/{sha}","languages_url":"https://api.github.com/repos/wesj/firefox-ios-1/languages","stargazers_url":"https://api.github.com/repos/wesj/firefox-ios-1/stargazers","contributors_url":"https://api.github.com/repos/wesj/firefox-ios-1/contributors","subscribers_url":"https://api.github.com/repos/wesj/firefox-ios-1/subscribers","subscription_url":"https://api.github.com/repos/wesj/firefox-ios-1/subscription","commits_url":"https://api.github.com/repos/wesj/firefox-ios-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/wesj/firefox-ios-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/wesj/firefox-ios-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/wesj/firefox-ios-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/wesj/firefox-ios-1/contents/{+path}","compare_url":"https://api.github.com/repos/wesj/firefox-ios-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/wesj/firefox-ios-1/merges","archive_url":"https://api.github.com/repos/wesj/firefox-ios-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/wesj/firefox-ios-1/downloads","issues_url":"https://api.github.com/repos/wesj/firefox-ios-1/issues{/number}","pulls_url":"https://api.github.com/repos/wesj/firefox-ios-1/pulls{/number}","milestones_url":"https://api.github.com/repos/wesj/firefox-ios-1/milestones{/number}","notifications_url":"https://api.github.com/repos/wesj/firefox-ios-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/wesj/firefox-ios-1/labels{/name}","releases_url":"https://api.github.com/repos/wesj/firefox-ios-1/releases{/id}","created_at":"2014-12-13T05:57:28Z","updated_at":"2015-02-25T23:35:37Z","pushed_at":"2015-02-25T23:35:37Z","git_url":"git://github.com/wesj/firefox-ios-1.git","ssh_url":"git@github.com:wesj/firefox-ios-1.git","clone_url":"https://github.com/wesj/firefox-ios-1.git","svn_url":"https://github.com/wesj/firefox-ios-1","homepage":"","size":14382,"stargazers_count":1,"watchers_count":1,"language":"C","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"mozilla:master","ref":"master","sha":"5271b9c20c7c69fc7b723192c4f75d0960dc4b06","user":{"login":"mozilla","id":131524,"avatar_url":"https://avatars.githubusercontent.com/u/131524?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla","html_url":"https://github.com/mozilla","followers_url":"https://api.github.com/users/mozilla/followers","following_url":"https://api.github.com/users/mozilla/following{/other_user}","gists_url":"https://api.github.com/users/mozilla/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla/subscriptions","organizations_url":"https://api.github.com/users/mozilla/orgs","repos_url":"https://api.github.com/users/mozilla/repos","events_url":"https://api.github.com/users/mozilla/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla/received_events","type":"Organization","site_admin":false},"repo":{"id":26133979,"name":"firefox-ios","full_name":"mozilla/firefox-ios","owner":{"login":"mozilla","id":131524,"avatar_url":"https://avatars.githubusercontent.com/u/131524?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla","html_url":"https://github.com/mozilla","followers_url":"https://api.github.com/users/mozilla/followers","following_url":"https://api.github.com/users/mozilla/following{/other_user}","gists_url":"https://api.github.com/users/mozilla/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla/subscriptions","organizations_url":"https://api.github.com/users/mozilla/orgs","repos_url":"https://api.github.com/users/mozilla/repos","events_url":"https://api.github.com/users/mozilla/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mozilla/firefox-ios","description":"Firefox for iOS","fork":false,"url":"https://api.github.com/repos/mozilla/firefox-ios","forks_url":"https://api.github.com/repos/mozilla/firefox-ios/forks","keys_url":"https://api.github.com/repos/mozilla/firefox-ios/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mozilla/firefox-ios/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mozilla/firefox-ios/teams","hooks_url":"https://api.github.com/repos/mozilla/firefox-ios/hooks","issue_events_url":"https://api.github.com/repos/mozilla/firefox-ios/issues/events{/number}","events_url":"https://api.github.com/repos/mozilla/firefox-ios/events","assignees_url":"https://api.github.com/repos/mozilla/firefox-ios/assignees{/user}","branches_url":"https://api.github.com/repos/mozilla/firefox-ios/branches{/branch}","tags_url":"https://api.github.com/repos/mozilla/firefox-ios/tags","blobs_url":"https://api.github.com/repos/mozilla/firefox-ios/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mozilla/firefox-ios/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mozilla/firefox-ios/git/refs{/sha}","trees_url":"https://api.github.com/repos/mozilla/firefox-ios/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mozilla/firefox-ios/statuses/{sha}","languages_url":"https://api.github.com/repos/mozilla/firefox-ios/languages","stargazers_url":"https://api.github.com/repos/mozilla/firefox-ios/stargazers","contributors_url":"https://api.github.com/repos/mozilla/firefox-ios/contributors","subscribers_url":"https://api.github.com/repos/mozilla/firefox-ios/subscribers","subscription_url":"https://api.github.com/repos/mozilla/firefox-ios/subscription","commits_url":"https://api.github.com/repos/mozilla/firefox-ios/commits{/sha}","git_commits_url":"https://api.github.com/repos/mozilla/firefox-ios/git/commits{/sha}","comments_url":"https://api.github.com/repos/mozilla/firefox-ios/comments{/number}","issue_comment_url":"https://api.github.com/repos/mozilla/firefox-ios/issues/comments{/number}","contents_url":"https://api.github.com/repos/mozilla/firefox-ios/contents/{+path}","compare_url":"https://api.github.com/repos/mozilla/firefox-ios/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mozilla/firefox-ios/merges","archive_url":"https://api.github.com/repos/mozilla/firefox-ios/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mozilla/firefox-ios/downloads","issues_url":"https://api.github.com/repos/mozilla/firefox-ios/issues{/number}","pulls_url":"https://api.github.com/repos/mozilla/firefox-ios/pulls{/number}","milestones_url":"https://api.github.com/repos/mozilla/firefox-ios/milestones{/number}","notifications_url":"https://api.github.com/repos/mozilla/firefox-ios/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mozilla/firefox-ios/labels{/name}","releases_url":"https://api.github.com/repos/mozilla/firefox-ios/releases{/id}","created_at":"2014-11-03T19:07:02Z","updated_at":"2015-02-26T18:30:27Z","pushed_at":"2015-02-26T18:30:27Z","git_url":"git://github.com/mozilla/firefox-ios.git","ssh_url":"git@github.com:mozilla/firefox-ios.git","clone_url":"https://github.com/mozilla/firefox-ios.git","svn_url":"https://github.com/mozilla/firefox-ios","homepage":"","size":20218,"stargazers_count":2935,"watchers_count":2935,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":467,"mirror_url":null,"open_issues_count":12,"forks":467,"open_issues":12,"watchers":2935,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mozilla/firefox-ios/pulls/173"},"html":{"href":"https://github.com/mozilla/firefox-ios/pull/173"},"issue":{"href":"https://api.github.com/repos/mozilla/firefox-ios/issues/173"},"comments":{"href":"https://api.github.com/repos/mozilla/firefox-ios/issues/173/comments"},"review_comments":{"href":"https://api.github.com/repos/mozilla/firefox-ios/pulls/173/comments"},"review_comment":{"href":"https://api.github.com/repos/mozilla/firefox-ios/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mozilla/firefox-ios/pulls/173/commits"},"statuses":{"href":"https://api.github.com/repos/mozilla/firefox-ios/statuses/40f8085c1e5ae5b2d21de4397c1ee6e77bd7d5c6"}}}}