prepare for multiple apps
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
||||
<!-- This is an automatically generated file.
|
||||
It will be read and overwritten.
|
||||
DO NOT EDIT! -->
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
||||
<TITLE>Bookmarks</TITLE>
|
||||
<H1 LAST_MODIFIED="1177541029">Bookmarks</H1>
|
||||
|
||||
<DL><p>
|
||||
<DT><H3 ID="rdf:#$ZvPhC3">Mozilla Firefox</H3>
|
||||
<DL><p>
|
||||
<DT><A HREF="http://en-US.www.mozilla.com/en-US/firefox/help/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$22iCK1">Help and Tutorials</A>
|
||||
<DT><A HREF="http://en-US.www.mozilla.com/en-US/firefox/customize/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$32iCK1">Customize Firefox</A>
|
||||
<DT><A HREF="http://en-US.www.mozilla.com/en-US/firefox/community/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$42iCK1">Get Involved</A>
|
||||
<DT><A HREF="http://en-US.www.mozilla.com/en-US/about/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$52iCK1">About Us</A>
|
||||
<DT><A HREF="b0rked" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$52iCK1">About Us</A>
|
||||
</DL><p>
|
||||
<DT><H3 ADD_DATE="1177541020" LAST_MODIFIED="1177541050" ID="rdf:#$74Gpx2">test</H3>
|
||||
<DD>folder test comment
|
||||
<DL><p>
|
||||
<DT><A HREF="http://test/post" ADD_DATE="1177375336" LAST_MODIFIED="1177375423" SHORTCUTURL="test" WEB_PANEL="true" POST_DATA="hidden1%3Dbar&text1%3D%25s" LAST_CHARSET="ISO-8859-1" ID="rdf:#$pYFe7">test post keyword</A>
|
||||
<DD>item description
|
||||
</DL>
|
||||
<DT><H3 UNFILED_BOOKMARKS_FOLDER="true">Unsorted Bookmarks</H3>
|
||||
<DL><p>
|
||||
<DT><A HREF="http://example.tld">Example.tld</A>
|
||||
</DL><p>
|
||||
<DT><H3 LAST_MODIFIED="1177541040" PERSONAL_TOOLBAR_FOLDER="true" ID="rdf:#$FvPhC3">Bookmarks Toolbar Folder</H3>
|
||||
<DD>Add bookmarks to this folder to see them displayed on the Bookmarks Toolbar
|
||||
<DL><p>
|
||||
<DT><A HREF="http://en-US.www.mozilla.com/en-US/firefox/central/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$GvPhC3">Getting Started</A>
|
||||
<DT><A HREF="http://en-US.fxfeeds.mozilla.com/en-US/firefox/livebookmarks/" LAST_MODIFIED="1177541035" FEEDURL="http://en-US.fxfeeds.mozilla.com/en-US/firefox/headlines.xml" ID="rdf:#$HvPhC3">Latest Headlines</A>
|
||||
<DT><A HREF="http://bogus-icon.mozilla.com/" ICON="b0rked" ID="rdf:#$GvPhC3">Getting Started</A>
|
||||
<DD>Livemark test comment
|
||||
</DL><p>
|
||||
</DL><p>
|
||||
@@ -0,0 +1,307 @@
|
||||
{
|
||||
"guid": "root________",
|
||||
"title": "",
|
||||
"id": 1,
|
||||
"dateAdded": 1361551978957783,
|
||||
"lastModified": 1361551978957783,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "placesRoot",
|
||||
"children": [
|
||||
{
|
||||
"guid": "menu________",
|
||||
"title": "Bookmarks Menu",
|
||||
"id": 2,
|
||||
"parent": 1,
|
||||
"dateAdded": 1361551978957783,
|
||||
"lastModified": 1361551979382837,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "bookmarksMenuFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "OCyeUO5uu9FF",
|
||||
"title": "Mozilla Firefox",
|
||||
"id": 6,
|
||||
"parent": 2,
|
||||
"dateAdded": 1361551979350273,
|
||||
"lastModified": 1361551979376699,
|
||||
"type": "text/x-moz-place-container",
|
||||
"children": [
|
||||
{
|
||||
"guid": "OCyeUO5uu9FG",
|
||||
"title": "Help and Tutorials",
|
||||
"id": 7,
|
||||
"parent": 6,
|
||||
"dateAdded": 1361551979356436,
|
||||
"lastModified": 1361551979362718,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://en-us.www.mozilla.com/en-US/firefox/help/",
|
||||
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg=="
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FH",
|
||||
"index": 1,
|
||||
"title": "Customize Firefox",
|
||||
"id": 8,
|
||||
"parent": 6,
|
||||
"dateAdded": 1361551979365662,
|
||||
"lastModified": 1361551979368077,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://en-us.www.mozilla.com/en-US/firefox/customize/",
|
||||
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg=="
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FJ",
|
||||
"index": 3,
|
||||
"title": "About Us",
|
||||
"id": 10,
|
||||
"parent": 6,
|
||||
"dateAdded": 1361551979376699,
|
||||
"lastModified": 1361551979379060,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://en-us.www.mozilla.com/en-US/about/",
|
||||
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg=="
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FI",
|
||||
"index": 2,
|
||||
"title": "Get Involved",
|
||||
"id": 9,
|
||||
"parent": 6,
|
||||
"dateAdded": 1361551979371071,
|
||||
"lastModified": 1361551979373745,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://en-us.www.mozilla.com/en-US/firefox/community/",
|
||||
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg=="
|
||||
},
|
||||
{
|
||||
"guid": "QFM-QnE2ZpMz",
|
||||
"title": "Test null postData",
|
||||
"index": 4,
|
||||
"dateAdded": 1481639510868000,
|
||||
"lastModified": 1489563704300000,
|
||||
"id": 17,
|
||||
"charset": "UTF-8",
|
||||
"annos": [
|
||||
{
|
||||
"name": "bookmarkProperties/description",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"value": "The best"
|
||||
}
|
||||
],
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://example.com/search?q=%s&suggid=",
|
||||
"postData": null
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FK",
|
||||
"index": 1,
|
||||
"title": "",
|
||||
"id": 11,
|
||||
"parent": 2,
|
||||
"dateAdded": 1361551979380988,
|
||||
"lastModified": 1361551979380988,
|
||||
"type": "text/x-moz-place-separator"
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FL",
|
||||
"index": 2,
|
||||
"title": "test",
|
||||
"id": 12,
|
||||
"parent": 2,
|
||||
"dateAdded": 1177541020000000,
|
||||
"lastModified": 1177541050000000,
|
||||
"annos": [
|
||||
{
|
||||
"name": "bookmarkProperties/description",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 3,
|
||||
"value": "folder test comment"
|
||||
}
|
||||
],
|
||||
"type": "text/x-moz-place-container",
|
||||
"children": [
|
||||
{
|
||||
"guid": "OCyeUO5uu9GX",
|
||||
"title": "test post keyword",
|
||||
"id": 13,
|
||||
"parent": 12,
|
||||
"dateAdded": 1177375336000000,
|
||||
"lastModified": 1177375423000000,
|
||||
"annos": [
|
||||
{
|
||||
"name": "bookmarkProperties/description",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 3,
|
||||
"value": "item description"
|
||||
},
|
||||
{
|
||||
"name": "bookmarkProperties/loadInSidebar",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 1,
|
||||
"value": 1
|
||||
}
|
||||
],
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://test/post",
|
||||
"keyword": "test",
|
||||
"charset": "ISO-8859-1",
|
||||
"postData": "hidden1%3Dbar&text1%3D%25s"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"title": "Bookmarks Toolbar",
|
||||
"id": 3,
|
||||
"parent": 1,
|
||||
"dateAdded": 1361551978957783,
|
||||
"lastModified": 1177541050000000,
|
||||
"annos": [
|
||||
{
|
||||
"name": "bookmarkProperties/description",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 3,
|
||||
"value": "Add bookmarks to this folder to see them displayed on the Bookmarks Toolbar"
|
||||
}
|
||||
],
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "toolbarFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "OCyeUO5uu9FB",
|
||||
"title": "Getting Started",
|
||||
"id": 15,
|
||||
"parent": 3,
|
||||
"dateAdded": 1361551979409695,
|
||||
"lastModified": 1361551979412080,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://en-us.www.mozilla.com/en-US/firefox/central/",
|
||||
"icon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg=="
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FR",
|
||||
"index": 1,
|
||||
"title": "Latest Headlines",
|
||||
"id": 16,
|
||||
"parent": 3,
|
||||
"dateAdded": 1361551979451584,
|
||||
"lastModified": 1361551979457086,
|
||||
"livemark": 1,
|
||||
"annos": [
|
||||
{
|
||||
"name": "livemark/feedURI",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 3,
|
||||
"value": "http://en-us.fxfeeds.mozilla.com/en-US/firefox/headlines.xml"
|
||||
},
|
||||
{
|
||||
"name": "livemark/siteURI",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 3,
|
||||
"value": "http://en-us.fxfeeds.mozilla.com/en-US/firefox/livebookmarks/"
|
||||
}
|
||||
],
|
||||
"type": "text/x-moz-place-container",
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"title": "Tags",
|
||||
"id": 4,
|
||||
"parent": 1,
|
||||
"dateAdded": 1361551978957783,
|
||||
"lastModified": 1361551978957783,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "tagsFolder",
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"index": 3,
|
||||
"title": "Unsorted Bookmarks",
|
||||
"id": 5,
|
||||
"parent": 1,
|
||||
"dateAdded": 1361551978957783,
|
||||
"lastModified": 1177541050000000,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "unfiledBookmarksFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "OCyeUO5uu9FW",
|
||||
"title": "Example.tld",
|
||||
"id": 14,
|
||||
"parent": 5,
|
||||
"dateAdded": 1361551979401846,
|
||||
"lastModified": 1361551979402952,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://example.tld/"
|
||||
},
|
||||
{
|
||||
"guid": "Cfkety492Afk",
|
||||
"title": "test tagged bookmark",
|
||||
"id": 15,
|
||||
"parent": 5,
|
||||
"dateAdded": 1507025843703345,
|
||||
"lastModified": 1507025844703124,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://example.tld/tagged",
|
||||
"tags": "foo"
|
||||
},
|
||||
{
|
||||
"guid": "lOZGoFR1eXbl",
|
||||
"title": "Bookmarks Toolbar Shortcut",
|
||||
"dateAdded": 1507025843703345,
|
||||
"lastModified": 1507025844703124,
|
||||
"id": 16,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "place:folder=TOOLBAR"
|
||||
},
|
||||
{
|
||||
"guid": "7yJWnBVhjRtP",
|
||||
"title": "Folder Shortcut",
|
||||
"dateAdded": 1507025843703345,
|
||||
"lastModified": 1507025844703124,
|
||||
"id": 17,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "place:folder=6"
|
||||
},
|
||||
{
|
||||
"guid": "vm5QXWuWc12l",
|
||||
"title": "Folder Shortcut 2",
|
||||
"dateAdded": 1507025843703345,
|
||||
"lastModified": 1507025844703124,
|
||||
"id": 18,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "place:folder=6123443"
|
||||
},
|
||||
{
|
||||
"guid": "Icg1XlIozA1D",
|
||||
"title": "Folder Shortcut 3",
|
||||
"dateAdded": 1507025843703345,
|
||||
"lastModified": 1507025844703124,
|
||||
"id": 18,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "place:folder=6&folder=BOOKMARKS_MENU"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
||||
<!-- This is an automatically generated file.
|
||||
It will be read and overwritten.
|
||||
DO NOT EDIT! -->
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
||||
<TITLE>Bookmarks</TITLE>
|
||||
<H1 LAST_MODIFIED="1177541029">Bookmarks</H1>
|
||||
|
||||
<DL><p>
|
||||
<DT><H3 ID="rdf:#$ZvPhC3">Mozilla Firefox</H3>
|
||||
<DL><p>
|
||||
<DT><A HREF="http://en-US.www.mozilla.com/en-US/firefox/help/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$22iCK1">Help and Tutorials</A>
|
||||
<DT><A HREF="http://en-US.www.mozilla.com/en-US/firefox/customize/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$32iCK1">Customize Firefox</A>
|
||||
<DT><A HREF="http://en-US.www.mozilla.com/en-US/firefox/community/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$42iCK1">Get Involved</A>
|
||||
<DT><A HREF="http://en-US.www.mozilla.com/en-US/about/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$52iCK1">About Us</A>
|
||||
</DL><p>
|
||||
<HR>
|
||||
<DT><H3 ADD_DATE="1177541020" LAST_MODIFIED="1177541050" ID="rdf:#$74Gpx2">test</H3>
|
||||
<DD>folder test comment
|
||||
<DL><p>
|
||||
<DT><A HREF="http://test/post" ADD_DATE="1177375336" LAST_MODIFIED="1177375423" SHORTCUTURL="test" WEB_PANEL="true" POST_DATA="hidden1%3Dbar&text1%3D%25s" LAST_CHARSET="ISO-8859-1" ID="rdf:#$pYFe7">test post keyword</A>
|
||||
<DD>item description
|
||||
</DL>
|
||||
<DT><H3 UNFILED_BOOKMARKS_FOLDER="true">Unsorted Bookmarks</H3>
|
||||
<DL><p>
|
||||
<DT><A HREF="http://example.tld">Example.tld</A>
|
||||
</DL><p>
|
||||
<DT><H3 LAST_MODIFIED="1177541040" PERSONAL_TOOLBAR_FOLDER="true" ID="rdf:#$FvPhC3">Bookmarks Toolbar Folder</H3>
|
||||
<DD>Add bookmarks to this folder to see them displayed on the Bookmarks Toolbar
|
||||
<DL><p>
|
||||
<DT><A HREF="http://en-US.www.mozilla.com/en-US/firefox/central/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$GvPhC3">Getting Started</A>
|
||||
<DT><A HREF="http://en-US.fxfeeds.mozilla.com/en-US/firefox/livebookmarks/" LAST_MODIFIED="1177541035" FEEDURL="http://en-US.fxfeeds.mozilla.com/en-US/firefox/headlines.xml" ID="rdf:#$HvPhC3">Latest Headlines</A>
|
||||
<DT><A LAST_MODIFIED="1177541035" FEEDURL="http://en-US.fxfeeds.mozilla.com/en-US/firefox/headlines.xml" ID="rdf:#$HvPhC3">Latest Headlines No Site</A>
|
||||
<DD>Livemark test comment
|
||||
</DL><p>
|
||||
</DL><p>
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"guid": "root________",
|
||||
"title": "",
|
||||
"id": 1,
|
||||
"dateAdded": 1361551978957783,
|
||||
"lastModified": 1361551978957783,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "placesRoot",
|
||||
"children": [
|
||||
{
|
||||
"guid": "menu________",
|
||||
"title": "Bookmarks Menu",
|
||||
"id": 2,
|
||||
"parent": 1,
|
||||
"dateAdded": 1361551978957783,
|
||||
"lastModified": 1361551979382837,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "bookmarksMenuFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "OCyeUO5uu9FG",
|
||||
"title": "Help and Tutorials",
|
||||
"id": 7,
|
||||
"dateAdded": 1361551979356436,
|
||||
"lastModified": 1361551979362718,
|
||||
"type": "x/invalid",
|
||||
"uri": "http://en-us.www.mozilla.com/en-US/firefox/help/"
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FH",
|
||||
"index": 1,
|
||||
"title": "Customize Firefox",
|
||||
"id": 8,
|
||||
"dateAdded": 1361551979365662,
|
||||
"lastModified": 1361551979368077,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://en-us.www.mozilla.com/en-US/firefox/customize/"
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FG",
|
||||
"title": "Bad URL",
|
||||
"id": 9,
|
||||
"dateAdded": 1361551979356436,
|
||||
"lastModified": 1361551979362718,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http:///"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "toolbar_____",
|
||||
"title": "Bookmarks Toolbar",
|
||||
"id": 2,
|
||||
"parent": 1,
|
||||
"dateAdded": 1361551978957783,
|
||||
"lastModified": 1361551979382837,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "toolbarFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "OCyeUO5uu9FG",
|
||||
"title": "Bad URL",
|
||||
"id": 9,
|
||||
"dateAdded": 1361551979356436,
|
||||
"lastModified": 1361551979362718,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http:///"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
||||
<!-- This is an automatically generated file.
|
||||
It will be read and overwritten.
|
||||
DO NOT EDIT! -->
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
||||
<TITLE>Bookmarks</TITLE>
|
||||
<LINK REL="localization" HREF="bookmarks_html_localized.ftl">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<H1 LAST_MODIFIED="1177541029">Bookmarks</H1>
|
||||
|
||||
<DL><p>
|
||||
<DT><H3 ID="rdf:#$ZvPhC3" data-l10n-id="bookmarks-html-localized-folder">bookmarks-html-localized-folder</H3>
|
||||
<DL><p>
|
||||
<DT><A HREF="http://www.mozilla.com/firefox/help/" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==" ID="rdf:#$22iCK1" data-l10n-id="bookmarks-html-localized-bookmark">bookmarks-html-localized-bookmark</A>
|
||||
</DL><p>
|
||||
</DL><p>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@@ -0,0 +1,10 @@
|
||||
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
||||
<HTML>
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
||||
<Title>Bookmarks</Title>
|
||||
<H1>Bookmarks</H1>
|
||||
<DT><H3>Subtitle</H3>
|
||||
<DL><p>
|
||||
<DT><A HREF="http://www.mozilla.org/">Mozilla</A>
|
||||
</DL><p>
|
||||
</HTML>
|
||||
@@ -0,0 +1,307 @@
|
||||
{
|
||||
"guid": "root________",
|
||||
"title": "",
|
||||
"id": 1,
|
||||
"dateAdded": 1361551978957783,
|
||||
"lastModified": 1361551978957783,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "placesRoot",
|
||||
"children": [
|
||||
{
|
||||
"guid": "menu________",
|
||||
"title": "Bookmarks Menu",
|
||||
"id": 2,
|
||||
"parent": 1,
|
||||
"dateAdded": 1361551978957783,
|
||||
"lastModified": 1361551979382837,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "bookmarksMenuFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "OCyeUO5uu9FF",
|
||||
"title": "Mozilla Firefox",
|
||||
"id": 6,
|
||||
"parent": 2,
|
||||
"dateAdded": 1361551979350273,
|
||||
"lastModified": 1361551979376699,
|
||||
"type": "text/x-moz-place-container",
|
||||
"children": [
|
||||
{
|
||||
"guid": "OCyeUO5uu9FG",
|
||||
"title": "Help and Tutorials",
|
||||
"id": 7,
|
||||
"parent": 6,
|
||||
"dateAdded": 1361551979356436,
|
||||
"lastModified": 1361551979362718,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://en-us.www.mozilla.com/en-US/firefox/help/",
|
||||
"iconUri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg=="
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FH",
|
||||
"index": 1,
|
||||
"title": "Customize Firefox",
|
||||
"id": 8,
|
||||
"parent": 6,
|
||||
"dateAdded": 1361551979365662,
|
||||
"lastModified": 1361551979368077,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://en-us.www.mozilla.com/en-US/firefox/customize/",
|
||||
"iconUri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg=="
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FJ",
|
||||
"index": 3,
|
||||
"title": "About Us",
|
||||
"id": 10,
|
||||
"parent": 6,
|
||||
"dateAdded": 1361551979376699,
|
||||
"lastModified": 1361551979379060,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://en-us.www.mozilla.com/en-US/about/",
|
||||
"iconUri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg=="
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FI",
|
||||
"index": 2,
|
||||
"title": "Get Involved",
|
||||
"id": 9,
|
||||
"parent": 6,
|
||||
"dateAdded": 1361551979371071,
|
||||
"lastModified": 1361551979373745,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://en-us.www.mozilla.com/en-US/firefox/community/",
|
||||
"iconUri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg=="
|
||||
},
|
||||
{
|
||||
"guid": "QFM-QnE2ZpMz",
|
||||
"title": "Test null postData",
|
||||
"index": 4,
|
||||
"dateAdded": 1481639510868000,
|
||||
"lastModified": 1489563704300000,
|
||||
"id": 17,
|
||||
"charset": "UTF-8",
|
||||
"annos": [
|
||||
{
|
||||
"name": "bookmarkProperties/description",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"value": "The best"
|
||||
}
|
||||
],
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://example.com/search?q=%s&suggid=",
|
||||
"postData": null
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FK",
|
||||
"index": 1,
|
||||
"title": "",
|
||||
"id": 11,
|
||||
"parent": 2,
|
||||
"dateAdded": 1361551979380988,
|
||||
"lastModified": 1361551979380988,
|
||||
"type": "text/x-moz-place-separator"
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FL",
|
||||
"index": 2,
|
||||
"title": "test",
|
||||
"id": 12,
|
||||
"parent": 2,
|
||||
"dateAdded": 1177541020000000,
|
||||
"lastModified": 1177541050000000,
|
||||
"annos": [
|
||||
{
|
||||
"name": "bookmarkProperties/description",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 3,
|
||||
"value": "folder test comment"
|
||||
}
|
||||
],
|
||||
"type": "text/x-moz-place-container",
|
||||
"children": [
|
||||
{
|
||||
"guid": "OCyeUO5uu9GX",
|
||||
"title": "test post keyword",
|
||||
"id": 13,
|
||||
"parent": 12,
|
||||
"dateAdded": 1177375336000000,
|
||||
"lastModified": 1177375423000000,
|
||||
"annos": [
|
||||
{
|
||||
"name": "bookmarkProperties/description",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 3,
|
||||
"value": "item description"
|
||||
},
|
||||
{
|
||||
"name": "bookmarkProperties/loadInSidebar",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 1,
|
||||
"value": 1
|
||||
}
|
||||
],
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://test/post",
|
||||
"keyword": "test",
|
||||
"charset": "ISO-8859-1",
|
||||
"postData": "hidden1%3Dbar&text1%3D%25s"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"index": 1,
|
||||
"title": "Bookmarks Toolbar",
|
||||
"id": 3,
|
||||
"parent": 1,
|
||||
"dateAdded": 1361551978957783,
|
||||
"lastModified": 1177541050000000,
|
||||
"annos": [
|
||||
{
|
||||
"name": "bookmarkProperties/description",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 3,
|
||||
"value": "Add bookmarks to this folder to see them displayed on the Bookmarks Toolbar"
|
||||
}
|
||||
],
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "toolbarFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "OCyeUO5uu9FB",
|
||||
"title": "Getting Started",
|
||||
"id": 15,
|
||||
"parent": 3,
|
||||
"dateAdded": 1361551979409695,
|
||||
"lastModified": 1361551979412080,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://en-us.www.mozilla.com/en-US/firefox/central/",
|
||||
"iconUri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg=="
|
||||
},
|
||||
{
|
||||
"guid": "OCyeUO5uu9FR",
|
||||
"index": 1,
|
||||
"title": "Latest Headlines",
|
||||
"id": 16,
|
||||
"parent": 3,
|
||||
"dateAdded": 1361551979451584,
|
||||
"lastModified": 1361551979457086,
|
||||
"livemark": 1,
|
||||
"annos": [
|
||||
{
|
||||
"name": "livemark/feedURI",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 3,
|
||||
"value": "http://en-us.fxfeeds.mozilla.com/en-US/firefox/headlines.xml"
|
||||
},
|
||||
{
|
||||
"name": "livemark/siteURI",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 3,
|
||||
"value": "http://en-us.fxfeeds.mozilla.com/en-US/firefox/livebookmarks/"
|
||||
}
|
||||
],
|
||||
"type": "text/x-moz-place-container",
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"title": "Tags",
|
||||
"id": 4,
|
||||
"parent": 1,
|
||||
"dateAdded": 1361551978957783,
|
||||
"lastModified": 1361551978957783,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "tagsFolder",
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"index": 3,
|
||||
"title": "Unsorted Bookmarks",
|
||||
"id": 5,
|
||||
"parent": 1,
|
||||
"dateAdded": 1361551978957783,
|
||||
"lastModified": 1177541050000000,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "unfiledBookmarksFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "OCyeUO5uu9FW",
|
||||
"title": "Example.tld",
|
||||
"id": 14,
|
||||
"parent": 5,
|
||||
"dateAdded": 1361551979401846,
|
||||
"lastModified": 1361551979402952,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://example.tld/"
|
||||
},
|
||||
{
|
||||
"guid": "Cfkety492Afk",
|
||||
"title": "test tagged bookmark",
|
||||
"id": 15,
|
||||
"parent": 5,
|
||||
"dateAdded": 1507025843703345,
|
||||
"lastModified": 1507025844703124,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://example.tld/tagged",
|
||||
"tags": "foo"
|
||||
},
|
||||
{
|
||||
"guid": "lOZGoFR1eXbl",
|
||||
"title": "Bookmarks Toolbar Shortcut",
|
||||
"dateAdded": 1507025843703345,
|
||||
"lastModified": 1507025844703124,
|
||||
"id": 16,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "place:folder=TOOLBAR"
|
||||
},
|
||||
{
|
||||
"guid": "7yJWnBVhjRtP",
|
||||
"title": "Folder Shortcut",
|
||||
"dateAdded": 1507025843703345,
|
||||
"lastModified": 1507025844703124,
|
||||
"id": 17,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "place:folder=6"
|
||||
},
|
||||
{
|
||||
"guid": "vm5QXWuWc12l",
|
||||
"title": "Folder Shortcut 2",
|
||||
"dateAdded": 1507025843703345,
|
||||
"lastModified": 1507025844703124,
|
||||
"id": 18,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "place:folder=6123443"
|
||||
},
|
||||
{
|
||||
"guid": "Icg1XlIozA1D",
|
||||
"title": "Folder Shortcut 3",
|
||||
"dateAdded": 1507025843703345,
|
||||
"lastModified": 1507025844703124,
|
||||
"id": 18,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "place:folder=6&folder=BOOKMARKS_MENU"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
{
|
||||
"guid": "root________",
|
||||
"title": "",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731479000,
|
||||
"id": 1,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "placesRoot",
|
||||
"children": [
|
||||
{
|
||||
"guid": "menu________",
|
||||
"title": "Bookmarks Menu",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731768000,
|
||||
"id": 2,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "bookmarksMenuFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "X6lUyOspVYwi",
|
||||
"title": "Test Pilot",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731768000,
|
||||
"lastModified": 1475084731768000,
|
||||
"id": 3,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://testpilot.firefox.com/"
|
||||
},
|
||||
{
|
||||
"guid": "XF4yRP6bTuil",
|
||||
"title": "Mobile bookmarks query",
|
||||
"index": 1,
|
||||
"dateAdded": 1475084731768000,
|
||||
"lastModified": 1475084731768000,
|
||||
"id": 11,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "place:folder=101"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "toolbar_____",
|
||||
"title": "Bookmarks Toolbar",
|
||||
"index": 1,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731742000,
|
||||
"id": 4,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "toolbarFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "buy7711R3ZgE",
|
||||
"title": "MDN",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731769000,
|
||||
"lastModified": 1475084731769000,
|
||||
"id": 5,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://developer.mozilla.org"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "3qmd_imziEBE",
|
||||
"title": "Mobile Bookmarks",
|
||||
"index": 5,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731770000,
|
||||
"id": 101,
|
||||
"annos": [
|
||||
{
|
||||
"name": "mobile/bookmarksRoot",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"name": "bookmarkProperties/description",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 3,
|
||||
"value": "A description of the mobile folder that should be ignored on import"
|
||||
}
|
||||
],
|
||||
"type": "text/x-moz-place-container",
|
||||
"children": [
|
||||
{
|
||||
"guid": "_o8e1_zxTJFg",
|
||||
"title": "Get Firefox!",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731769000,
|
||||
"lastModified": 1475084731769000,
|
||||
"id": 7,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://getfirefox.com/"
|
||||
},
|
||||
{
|
||||
"guid": "QCtSqkVYUbXB",
|
||||
"title": "Get Thunderbird!",
|
||||
"index": 1,
|
||||
"dateAdded": 1475084731770000,
|
||||
"lastModified": 1475084731770000,
|
||||
"id": 8,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://getthunderbird.com/"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "unfiled_____",
|
||||
"title": "Other Bookmarks",
|
||||
"index": 3,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731742000,
|
||||
"id": 9,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "unfiledBookmarksFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "KIa9iKZab2Z5",
|
||||
"title": "Add-ons",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731769000,
|
||||
"lastModified": 1475084731769000,
|
||||
"id": 10,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://addons.mozilla.org"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
{
|
||||
"guid": "root________",
|
||||
"title": "",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731479000,
|
||||
"id": 1,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "placesRoot",
|
||||
"children": [
|
||||
{
|
||||
"guid": "menu________",
|
||||
"title": "Bookmarks Menu",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731768000,
|
||||
"id": 2,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "bookmarksMenuFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "Utodo9b0oVws",
|
||||
"title": "Firefox Accounts",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731955000,
|
||||
"lastModified": 1475084731955000,
|
||||
"id": 3,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://accounts.firefox.com/"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "toolbar_____",
|
||||
"title": "Bookmarks Toolbar",
|
||||
"index": 1,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731742000,
|
||||
"id": 4,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "toolbarFolder"
|
||||
},
|
||||
{
|
||||
"guid": "3qmd_imziEBE",
|
||||
"title": "Mobile Bookmarks",
|
||||
"index": 5,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731770000,
|
||||
"id": 5,
|
||||
"annos": [
|
||||
{
|
||||
"name": "mobile/bookmarksRoot",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"name": "bookmarkProperties/description",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 3,
|
||||
"value": "A description of the mobile folder that should be ignored on import"
|
||||
}
|
||||
],
|
||||
"type": "text/x-moz-place-container",
|
||||
"children": [
|
||||
{
|
||||
"guid": "a17yW6-nTxEJ",
|
||||
"title": "Mozilla",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731959000,
|
||||
"lastModified": 1475084731959000,
|
||||
"id": 6,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://mozilla.org/"
|
||||
},
|
||||
{
|
||||
"guid": "xV10h9Wi3FBM",
|
||||
"title": "Bugzilla",
|
||||
"index": 1,
|
||||
"dateAdded": 1475084731961000,
|
||||
"lastModified": 1475084731961000,
|
||||
"id": 7,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://bugzilla.mozilla.org/"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "unfiled_____",
|
||||
"title": "Other Bookmarks",
|
||||
"index": 3,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731742000,
|
||||
"id": 8,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "unfiledBookmarksFolder"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"guid": "root________",
|
||||
"title": "",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731479000,
|
||||
"id": 1,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "placesRoot",
|
||||
"children": [
|
||||
{
|
||||
"guid": "menu________",
|
||||
"title": "Bookmarks Menu",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731768000,
|
||||
"id": 2,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "bookmarksMenuFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "buy7711R3ZgE",
|
||||
"title": "MDN",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731769000,
|
||||
"lastModified": 1475084731769000,
|
||||
"id": 3,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://developer.mozilla.org"
|
||||
},
|
||||
{
|
||||
"guid": "F_LBgd1fS_uQ",
|
||||
"title": "Mobile bookmarks query for first folder",
|
||||
"index": 1,
|
||||
"dateAdded": 1475084731768000,
|
||||
"lastModified": 1475084731768000,
|
||||
"id": 11,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "place:folder=101"
|
||||
},
|
||||
{
|
||||
"guid": "oIpmQXMWsXvY",
|
||||
"title": "Mobile bookmarks query for second folder",
|
||||
"index": 2,
|
||||
"dateAdded": 1475084731768000,
|
||||
"lastModified": 1475084731768000,
|
||||
"id": 12,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "place:folder=102"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "3qmd_imziEBE",
|
||||
"title": "Mobile Bookmarks",
|
||||
"index": 5,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731770000,
|
||||
"id": 101,
|
||||
"annos": [
|
||||
{
|
||||
"name": "mobile/bookmarksRoot",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"name": "bookmarkProperties/description",
|
||||
"flags": 0,
|
||||
"expires": 4,
|
||||
"mimeType": null,
|
||||
"type": 3,
|
||||
"value": "A description of the mobile folder that should be ignored on import"
|
||||
}
|
||||
],
|
||||
"type": "text/x-moz-place-container",
|
||||
"children": [
|
||||
{
|
||||
"guid": "a17yW6-nTxEJ",
|
||||
"title": "Mozilla",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731959000,
|
||||
"lastModified": 1475084731959000,
|
||||
"id": 5,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://mozilla.org/"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "toolbar_____",
|
||||
"title": "Bookmarks Toolbar",
|
||||
"index": 1,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731742000,
|
||||
"id": 6,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "toolbarFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "Utodo9b0oVws",
|
||||
"title": "Firefox Accounts",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731955000,
|
||||
"lastModified": 1475084731955000,
|
||||
"id": 7,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://accounts.firefox.com/"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "o4YjJpgsufU-",
|
||||
"title": "Mobile Bookmarks",
|
||||
"index": 7,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731770000,
|
||||
"id": 102,
|
||||
"annos": [
|
||||
{ "name": "mobile/bookmarksRoot", "flags": 0, "expires": 4, "value": 1 }
|
||||
],
|
||||
"type": "text/x-moz-place-container",
|
||||
"children": [
|
||||
{
|
||||
"guid": "sSZ86WT9WbN3",
|
||||
"title": "DXR",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731769000,
|
||||
"lastModified": 1475084731769000,
|
||||
"id": 9,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://dxr.mozilla.org"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "unfiled_____",
|
||||
"title": "Other Bookmarks",
|
||||
"index": 3,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731742000,
|
||||
"id": 10,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "unfiledBookmarksFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "xV10h9Wi3FBM",
|
||||
"title": "Bugzilla",
|
||||
"index": 1,
|
||||
"dateAdded": 1475084731961000,
|
||||
"lastModified": 1475084731961000,
|
||||
"id": 11,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://bugzilla.mozilla.org/"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"guid": "root________",
|
||||
"title": "",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731479000,
|
||||
"id": 1,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "placesRoot",
|
||||
"children": [
|
||||
{
|
||||
"guid": "menu________",
|
||||
"title": "Bookmarks Menu",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731768000,
|
||||
"id": 2,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "bookmarksMenuFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "X6lUyOspVYwi",
|
||||
"title": "Test Pilot",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731768000,
|
||||
"lastModified": 1475084731768000,
|
||||
"id": 3,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://testpilot.firefox.com/"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "toolbar_____",
|
||||
"title": "Bookmarks Toolbar",
|
||||
"index": 1,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731742000,
|
||||
"id": 4,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "toolbarFolder"
|
||||
},
|
||||
{
|
||||
"guid": "unfiled_____",
|
||||
"title": "Other Bookmarks",
|
||||
"index": 3,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731742000,
|
||||
"id": 5,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "unfiledBookmarksFolder"
|
||||
},
|
||||
{
|
||||
"guid": "mobile______",
|
||||
"title": "Mobile Bookmarks",
|
||||
"index": 4,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731770000,
|
||||
"id": 6,
|
||||
"annos": [
|
||||
{ "name": "mobile/bookmarksRoot", "flags": 0, "expires": 4, "value": 1 }
|
||||
],
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "mobileFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "_o8e1_zxTJFg",
|
||||
"title": "Get Firefox!",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731769000,
|
||||
"lastModified": 1475084731769000,
|
||||
"id": 7,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://getfirefox.com/"
|
||||
},
|
||||
{
|
||||
"guid": "QCtSqkVYUbXB",
|
||||
"title": "Get Thunderbird!",
|
||||
"index": 1,
|
||||
"dateAdded": 1475084731770000,
|
||||
"lastModified": 1475084731770000,
|
||||
"id": 8,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "http://getthunderbird.com/"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"guid": "root________",
|
||||
"title": "",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731479000,
|
||||
"id": 1,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "placesRoot",
|
||||
"children": [
|
||||
{
|
||||
"guid": "menu________",
|
||||
"title": "Bookmarks Menu",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731955000,
|
||||
"id": 2,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "bookmarksMenuFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "Utodo9b0oVws",
|
||||
"title": "Firefox Accounts",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731955000,
|
||||
"lastModified": 1475084731955000,
|
||||
"id": 3,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://accounts.firefox.com/"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"guid": "toolbar_____",
|
||||
"title": "Bookmarks Toolbar",
|
||||
"index": 1,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731938000,
|
||||
"id": 4,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "toolbarFolder"
|
||||
},
|
||||
{
|
||||
"guid": "unfiled_____",
|
||||
"title": "Other Bookmarks",
|
||||
"index": 3,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731938000,
|
||||
"id": 5,
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "unfiledBookmarksFolder"
|
||||
},
|
||||
{
|
||||
"guid": "mobile______",
|
||||
"title": "Mobile Bookmarks",
|
||||
"index": 4,
|
||||
"dateAdded": 1475084731479000,
|
||||
"lastModified": 1475084731961000,
|
||||
"id": 6,
|
||||
"annos": [
|
||||
{ "name": "mobile/bookmarksRoot", "flags": 0, "expires": 4, "value": 1 }
|
||||
],
|
||||
"type": "text/x-moz-place-container",
|
||||
"root": "mobileFolder",
|
||||
"children": [
|
||||
{
|
||||
"guid": "a17yW6-nTxEJ",
|
||||
"title": "Mozilla",
|
||||
"index": 0,
|
||||
"dateAdded": 1475084731959000,
|
||||
"lastModified": 1475084731959000,
|
||||
"id": 7,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://mozilla.org/"
|
||||
},
|
||||
{
|
||||
"guid": "xV10h9Wi3FBM",
|
||||
"title": "Bugzilla",
|
||||
"index": 1,
|
||||
"dateAdded": 1475084731961000,
|
||||
"lastModified": 1475084731961000,
|
||||
"id": 8,
|
||||
"type": "text/x-moz-place",
|
||||
"uri": "https://bugzilla.mozilla.org/"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,242 @@
|
||||
/*
|
||||
* Copyright (c) 2024-2026 Fabian Freund.
|
||||
*
|
||||
* This file is part of WebLibre
|
||||
* (see https://weblibre.eu).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:weblibre/utils/input_classification.dart';
|
||||
|
||||
void main() {
|
||||
group('classifyAddressBarInput', () {
|
||||
test('searches free text containing whitespace', () {
|
||||
final result = classifyAddressBarInput('WebLibre README.md');
|
||||
|
||||
expect(result, isA<SearchInputClassification>());
|
||||
final search = result as SearchInputClassification;
|
||||
expect(search.reason, SearchReason.containsWhitespace);
|
||||
expect(search.query, 'WebLibre README.md');
|
||||
});
|
||||
|
||||
test('navigates schemeless domain', () {
|
||||
final result = classifyAddressBarInput('weblibre.eu');
|
||||
|
||||
expect(result, isA<NavigateInputClassification>());
|
||||
final navigation = result as NavigateInputClassification;
|
||||
expect(navigation.reason, NavigationReason.schemelessHost);
|
||||
expect(navigation.uri.toString(), 'https://weblibre.eu');
|
||||
});
|
||||
|
||||
test('navigates localhost over http', () {
|
||||
final result = classifyAddressBarInput('localhost:8080');
|
||||
|
||||
expect(result, isA<NavigateInputClassification>());
|
||||
final navigation = result as NavigateInputClassification;
|
||||
expect(navigation.reason, NavigationReason.localhost);
|
||||
expect(navigation.uri.toString(), 'http://localhost:8080');
|
||||
});
|
||||
|
||||
test('navigates explicit moz-extension uri', () {
|
||||
final result = classifyAddressBarInput('moz-extension://abc/index.html');
|
||||
|
||||
expect(result, isA<NavigateInputClassification>());
|
||||
final navigation = result as NavigateInputClassification;
|
||||
expect(navigation.reason, NavigationReason.explicitScheme);
|
||||
expect(navigation.uri.scheme, 'moz-extension');
|
||||
});
|
||||
|
||||
test('rejects explicit unsupported scheme as invalid', () {
|
||||
final result = classifyAddressBarInput('myapp://callback?token=abc');
|
||||
|
||||
expect(result, isA<InvalidInputClassification>());
|
||||
final invalid = result as InvalidInputClassification;
|
||||
expect(invalid.reason, InvalidReason.unsupportedScheme);
|
||||
});
|
||||
|
||||
test('rejects dotted explicit unsupported scheme as invalid', () {
|
||||
final result = classifyAddressBarInput('my.app://callback');
|
||||
|
||||
expect(result, isA<InvalidInputClassification>());
|
||||
final invalid = result as InvalidInputClassification;
|
||||
expect(invalid.reason, InvalidReason.unsupportedScheme);
|
||||
});
|
||||
|
||||
test('rejects javascript scheme as invalid', () {
|
||||
final result = classifyAddressBarInput('JAVASCRIPT:alert(1)');
|
||||
|
||||
expect(result, isA<InvalidInputClassification>());
|
||||
final invalid = result as InvalidInputClassification;
|
||||
expect(invalid.reason, InvalidReason.unsupportedScheme);
|
||||
});
|
||||
|
||||
test('does not decode encoded scheme before classification', () {
|
||||
final result = classifyAddressBarInput('%6aavascript:alert(1)');
|
||||
|
||||
expect(result, isA<SearchInputClassification>());
|
||||
});
|
||||
|
||||
test('rejects control chars as invalid', () {
|
||||
final result = classifyAddressBarInput('example.com\x00path');
|
||||
|
||||
expect(result, isA<InvalidInputClassification>());
|
||||
final invalid = result as InvalidInputClassification;
|
||||
expect(invalid.reason, InvalidReason.containsControlChars);
|
||||
});
|
||||
|
||||
test('invalid schemeless port falls back to search', () {
|
||||
final result = classifyAddressBarInput('weblibre.eu:99999');
|
||||
|
||||
expect(result, isA<SearchInputClassification>());
|
||||
});
|
||||
|
||||
test('explicit disallowed scheme with whitespace remains invalid', () {
|
||||
final result = classifyAddressBarInput('javascript: alert(1)');
|
||||
|
||||
expect(result, isA<InvalidInputClassification>());
|
||||
final invalid = result as InvalidInputClassification;
|
||||
expect(invalid.reason, InvalidReason.unsupportedScheme);
|
||||
});
|
||||
|
||||
test('unknown explicit scheme with whitespace remains invalid', () {
|
||||
final result = classifyAddressBarInput('myapp: secret token');
|
||||
|
||||
expect(result, isA<InvalidInputClassification>());
|
||||
final invalid = result as InvalidInputClassification;
|
||||
expect(invalid.reason, InvalidReason.unsupportedScheme);
|
||||
});
|
||||
|
||||
test('colon-prefixed query with whitespace is treated as invalid', () {
|
||||
final result = classifyAddressBarInput('site:weblibre.eu privacy');
|
||||
|
||||
expect(result, isA<InvalidInputClassification>());
|
||||
final invalid = result as InvalidInputClassification;
|
||||
expect(invalid.reason, InvalidReason.unsupportedScheme);
|
||||
});
|
||||
|
||||
test('symbolic colon query with whitespace is treated as invalid', () {
|
||||
final result = classifyAddressBarInput('c++: tutorial');
|
||||
|
||||
expect(result, isA<InvalidInputClassification>());
|
||||
final invalid = result as InvalidInputClassification;
|
||||
expect(invalid.reason, InvalidReason.unsupportedScheme);
|
||||
});
|
||||
|
||||
test('navigates schemeless domain with valid port', () {
|
||||
final result = classifyAddressBarInput('weblibre.eu:8080');
|
||||
|
||||
expect(result, isA<NavigateInputClassification>());
|
||||
final navigation = result as NavigateInputClassification;
|
||||
expect(navigation.reason, NavigationReason.schemelessHost);
|
||||
expect(navigation.uri.toString(), 'https://weblibre.eu:8080');
|
||||
});
|
||||
|
||||
test('navigates IP literal', () {
|
||||
final result = classifyAddressBarInput('192.168.1.1');
|
||||
|
||||
expect(result, isA<NavigateInputClassification>());
|
||||
final navigation = result as NavigateInputClassification;
|
||||
expect(navigation.reason, NavigationReason.ipLiteral);
|
||||
expect(navigation.uri.toString(), 'https://192.168.1.1');
|
||||
});
|
||||
|
||||
test('navigates explicit scheme with space in path', () {
|
||||
final result = classifyAddressBarInput('https://example.com/a b');
|
||||
|
||||
expect(result, isA<NavigateInputClassification>());
|
||||
final navigation = result as NavigateInputClassification;
|
||||
expect(navigation.reason, NavigationReason.explicitScheme);
|
||||
expect(navigation.uri.host, 'example.com');
|
||||
});
|
||||
|
||||
test('rejects data scheme as invalid', () {
|
||||
final result = classifyAddressBarInput(
|
||||
'data:text/html,<script>alert(1)</script>',
|
||||
);
|
||||
|
||||
expect(result, isA<InvalidInputClassification>());
|
||||
final invalid = result as InvalidInputClassification;
|
||||
expect(invalid.reason, InvalidReason.unsupportedScheme);
|
||||
});
|
||||
|
||||
test('treats missing scheme prefix as search', () {
|
||||
final result = classifyAddressBarInput('://example.com');
|
||||
|
||||
expect(result, isA<SearchInputClassification>());
|
||||
});
|
||||
|
||||
test('navigates URL with credentials', () {
|
||||
final result = classifyAddressBarInput('https://user:pass@example.com');
|
||||
|
||||
expect(result, isA<NavigateInputClassification>());
|
||||
final navigation = result as NavigateInputClassification;
|
||||
expect(navigation.reason, NavigationReason.explicitScheme);
|
||||
expect(navigation.uri.host, 'example.com');
|
||||
});
|
||||
|
||||
test('rejects very long input as tooLong', () {
|
||||
final longInput = 'a' * 5000;
|
||||
final result = classifyAddressBarInput(longInput);
|
||||
|
||||
expect(result, isA<InvalidInputClassification>());
|
||||
final invalid = result as InvalidInputClassification;
|
||||
expect(invalid.reason, InvalidReason.tooLong);
|
||||
});
|
||||
|
||||
test('rejects empty input as emptyInput', () {
|
||||
final result = classifyAddressBarInput('');
|
||||
|
||||
expect(result, isA<InvalidInputClassification>());
|
||||
final invalid = result as InvalidInputClassification;
|
||||
expect(invalid.reason, InvalidReason.emptyInput);
|
||||
});
|
||||
|
||||
test('rejects whitespace-only input as emptyInput', () {
|
||||
final result = classifyAddressBarInput(' ');
|
||||
|
||||
expect(result, isA<InvalidInputClassification>());
|
||||
final invalid = result as InvalidInputClassification;
|
||||
expect(invalid.reason, InvalidReason.emptyInput);
|
||||
});
|
||||
});
|
||||
|
||||
group('parseSharedIntentUrl', () {
|
||||
test('parses explicit https', () {
|
||||
final uri = parseSharedIntentUrl('https://weblibre.eu');
|
||||
|
||||
expect(uri, isNotNull);
|
||||
expect(uri!.scheme, 'https');
|
||||
});
|
||||
|
||||
test('treats explicit non-http scheme as non-url', () {
|
||||
final uri = parseSharedIntentUrl('moz-extension://abc/index.html');
|
||||
|
||||
expect(uri, isNull);
|
||||
});
|
||||
|
||||
test('treats explicit dotted non-http scheme as non-url', () {
|
||||
final uri = parseSharedIntentUrl('my.app://callback');
|
||||
|
||||
expect(uri, isNull);
|
||||
});
|
||||
|
||||
test('treats plain sentence as non-url', () {
|
||||
final uri = parseSharedIntentUrl('This is WebLibre README.md');
|
||||
|
||||
expect(uri, isNull);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,290 @@
|
||||
/*
|
||||
* Copyright (c) 2024-2026 Fabian Freund.
|
||||
*
|
||||
* This file is part of WebLibre
|
||||
* (see https://weblibre.eu).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:weblibre/utils/text_highlight.dart';
|
||||
|
||||
void main() {
|
||||
group('buildHighlightedText', () {
|
||||
const baseStyle = TextStyle(color: Colors.black);
|
||||
const highlightStyle = TextStyle(
|
||||
color: Colors.red,
|
||||
fontWeight: FontWeight.bold,
|
||||
);
|
||||
const matchPrefix = '***';
|
||||
const matchSuffix = '***';
|
||||
|
||||
test('returns plain text when no highlights present', () {
|
||||
final result = buildHighlightedText(
|
||||
'Hello world',
|
||||
baseStyle,
|
||||
highlightStyle,
|
||||
matchPrefix,
|
||||
matchSuffix,
|
||||
);
|
||||
|
||||
expect(result.children?.length, 1);
|
||||
final span = result.children![0] as TextSpan;
|
||||
expect(span.text, 'Hello world');
|
||||
expect(span.style, baseStyle);
|
||||
});
|
||||
|
||||
test('highlights single match in middle of text', () {
|
||||
final result = buildHighlightedText(
|
||||
'Hello ***world***!',
|
||||
baseStyle,
|
||||
highlightStyle,
|
||||
matchPrefix,
|
||||
matchSuffix,
|
||||
);
|
||||
|
||||
expect(result.children?.length, 3);
|
||||
|
||||
final span1 = result.children![0] as TextSpan;
|
||||
expect(span1.text, 'Hello ');
|
||||
expect(span1.style, baseStyle);
|
||||
|
||||
final span2 = result.children![1] as TextSpan;
|
||||
expect(span2.text, 'world');
|
||||
expect(span2.style, highlightStyle);
|
||||
|
||||
final span3 = result.children![2] as TextSpan;
|
||||
expect(span3.text, '!');
|
||||
expect(span3.style, baseStyle);
|
||||
});
|
||||
|
||||
test('highlights multiple matches', () {
|
||||
final result = buildHighlightedText(
|
||||
'The ***quick*** brown ***fox***',
|
||||
baseStyle,
|
||||
highlightStyle,
|
||||
matchPrefix,
|
||||
matchSuffix,
|
||||
);
|
||||
|
||||
expect(result.children?.length, 4);
|
||||
|
||||
expect((result.children![0] as TextSpan).text, 'The ');
|
||||
expect((result.children![0] as TextSpan).style, baseStyle);
|
||||
|
||||
expect((result.children![1] as TextSpan).text, 'quick');
|
||||
expect((result.children![1] as TextSpan).style, highlightStyle);
|
||||
|
||||
expect((result.children![2] as TextSpan).text, ' brown ');
|
||||
expect((result.children![2] as TextSpan).style, baseStyle);
|
||||
|
||||
expect((result.children![3] as TextSpan).text, 'fox');
|
||||
expect((result.children![3] as TextSpan).style, highlightStyle);
|
||||
});
|
||||
|
||||
test('handles highlight at start of text', () {
|
||||
final result = buildHighlightedText(
|
||||
'***Hello*** world',
|
||||
baseStyle,
|
||||
highlightStyle,
|
||||
matchPrefix,
|
||||
matchSuffix,
|
||||
);
|
||||
|
||||
expect(result.children?.length, 2);
|
||||
|
||||
final span1 = result.children![0] as TextSpan;
|
||||
expect(span1.text, 'Hello');
|
||||
expect(span1.style, highlightStyle);
|
||||
|
||||
final span2 = result.children![1] as TextSpan;
|
||||
expect(span2.text, ' world');
|
||||
expect(span2.style, baseStyle);
|
||||
});
|
||||
|
||||
test('handles highlight at end of text', () {
|
||||
final result = buildHighlightedText(
|
||||
'Hello ***world***',
|
||||
baseStyle,
|
||||
highlightStyle,
|
||||
matchPrefix,
|
||||
matchSuffix,
|
||||
);
|
||||
|
||||
expect(result.children?.length, 2);
|
||||
|
||||
final span1 = result.children![0] as TextSpan;
|
||||
expect(span1.text, 'Hello ');
|
||||
expect(span1.style, baseStyle);
|
||||
|
||||
final span2 = result.children![1] as TextSpan;
|
||||
expect(span2.text, 'world');
|
||||
expect(span2.style, highlightStyle);
|
||||
});
|
||||
|
||||
test('handles entire text highlighted', () {
|
||||
final result = buildHighlightedText(
|
||||
'***Hello world***',
|
||||
baseStyle,
|
||||
highlightStyle,
|
||||
matchPrefix,
|
||||
matchSuffix,
|
||||
);
|
||||
|
||||
expect(result.children?.length, 1);
|
||||
|
||||
final span = result.children![0] as TextSpan;
|
||||
expect(span.text, 'Hello world');
|
||||
expect(span.style, highlightStyle);
|
||||
});
|
||||
|
||||
test('handles consecutive highlights', () {
|
||||
final result = buildHighlightedText(
|
||||
'***hello******world***',
|
||||
baseStyle,
|
||||
highlightStyle,
|
||||
matchPrefix,
|
||||
matchSuffix,
|
||||
);
|
||||
|
||||
expect(result.children?.length, 2);
|
||||
|
||||
expect((result.children![0] as TextSpan).text, 'hello');
|
||||
expect((result.children![0] as TextSpan).style, highlightStyle);
|
||||
|
||||
expect((result.children![1] as TextSpan).text, 'world');
|
||||
expect((result.children![1] as TextSpan).style, highlightStyle);
|
||||
});
|
||||
|
||||
test('handles empty highlight', () {
|
||||
final result = buildHighlightedText(
|
||||
'Hello ******world',
|
||||
baseStyle,
|
||||
highlightStyle,
|
||||
matchPrefix,
|
||||
matchSuffix,
|
||||
);
|
||||
|
||||
expect(result.children?.length, 3);
|
||||
|
||||
expect((result.children![0] as TextSpan).text, 'Hello ');
|
||||
expect((result.children![1] as TextSpan).text, '');
|
||||
expect((result.children![2] as TextSpan).text, 'world');
|
||||
});
|
||||
|
||||
test('handles unclosed prefix marker', () {
|
||||
final result = buildHighlightedText(
|
||||
'Hello ***world',
|
||||
baseStyle,
|
||||
highlightStyle,
|
||||
matchPrefix,
|
||||
matchSuffix,
|
||||
);
|
||||
|
||||
// When suffix not found, highlight everything after prefix to end
|
||||
expect(result.children?.length, 2);
|
||||
|
||||
expect((result.children![0] as TextSpan).text, 'Hello ');
|
||||
expect((result.children![0] as TextSpan).style, baseStyle);
|
||||
expect((result.children![1] as TextSpan).text, 'world');
|
||||
expect((result.children![1] as TextSpan).style, highlightStyle);
|
||||
});
|
||||
|
||||
test('handles missing suffix marker', () {
|
||||
final result = buildHighlightedText(
|
||||
'***Hello',
|
||||
baseStyle,
|
||||
highlightStyle,
|
||||
matchPrefix,
|
||||
matchSuffix,
|
||||
);
|
||||
|
||||
expect(result.children?.length, 1);
|
||||
|
||||
final span = result.children![0] as TextSpan;
|
||||
expect(span.text, 'Hello');
|
||||
expect(span.style, highlightStyle);
|
||||
});
|
||||
|
||||
test('handles empty string', () {
|
||||
final result = buildHighlightedText(
|
||||
'',
|
||||
baseStyle,
|
||||
highlightStyle,
|
||||
matchPrefix,
|
||||
matchSuffix,
|
||||
);
|
||||
|
||||
expect(result.children?.length, 0);
|
||||
});
|
||||
|
||||
test('handles different prefix and suffix markers', () {
|
||||
final result = buildHighlightedText(
|
||||
'Hello <mark>world</mark>!',
|
||||
baseStyle,
|
||||
highlightStyle,
|
||||
'<mark>',
|
||||
'</mark>',
|
||||
);
|
||||
|
||||
expect(result.children?.length, 3);
|
||||
|
||||
expect((result.children![0] as TextSpan).text, 'Hello ');
|
||||
expect((result.children![1] as TextSpan).text, 'world');
|
||||
expect((result.children![1] as TextSpan).style, highlightStyle);
|
||||
expect((result.children![2] as TextSpan).text, '!');
|
||||
});
|
||||
|
||||
// Note: Nested markers behavior is undefined and not a real-world FTS5 scenario
|
||||
// This test is skipped as the exact parsing behavior for nested markers
|
||||
// is implementation-specific and not guaranteed
|
||||
|
||||
test('handles null styles', () {
|
||||
final result = buildHighlightedText(
|
||||
'Hello ***world***!',
|
||||
null,
|
||||
null,
|
||||
matchPrefix,
|
||||
matchSuffix,
|
||||
);
|
||||
|
||||
expect(result.children?.length, 3);
|
||||
|
||||
expect((result.children![0] as TextSpan).style, null);
|
||||
expect((result.children![1] as TextSpan).style, null);
|
||||
expect((result.children![2] as TextSpan).style, null);
|
||||
});
|
||||
|
||||
test('real-world FTS5 example', () {
|
||||
final result = buildHighlightedText(
|
||||
'Mozilla Developer Network (***MDN***) Web Docs',
|
||||
baseStyle,
|
||||
highlightStyle,
|
||||
matchPrefix,
|
||||
matchSuffix,
|
||||
);
|
||||
|
||||
expect(result.children?.length, 3);
|
||||
|
||||
expect(
|
||||
(result.children![0] as TextSpan).text,
|
||||
'Mozilla Developer Network (',
|
||||
);
|
||||
expect((result.children![1] as TextSpan).text, 'MDN');
|
||||
expect((result.children![1] as TextSpan).style, highlightStyle);
|
||||
expect((result.children![2] as TextSpan).text, ') Web Docs');
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
/*
|
||||
* Copyright (c) 2024-2026 Fabian Freund.
|
||||
*
|
||||
* This file is part of WebLibre
|
||||
* (see https://weblibre.eu).
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:weblibre/utils/uri_input_parser.dart';
|
||||
import 'package:weblibre/utils/uri_policy.dart';
|
||||
|
||||
void main() {
|
||||
group('parseExplicitUri', () {
|
||||
test('parses supported explicit scheme', () {
|
||||
final uri = parseExplicitUri(
|
||||
'https://weblibre.eu/path',
|
||||
policy: SchemePolicy.addressBarTyped,
|
||||
);
|
||||
|
||||
expect(uri, isNotNull);
|
||||
expect(uri!.scheme, 'https');
|
||||
expect(uri.host, 'weblibre.eu');
|
||||
});
|
||||
|
||||
test('rejects unsupported explicit scheme', () {
|
||||
final uri = parseExplicitUri(
|
||||
'javascript:alert(1)',
|
||||
policy: SchemePolicy.addressBarTyped,
|
||||
);
|
||||
|
||||
expect(uri, isNull);
|
||||
});
|
||||
|
||||
test('rejects malformed explicit uri with required authority', () {
|
||||
final uri = parseExplicitUri(
|
||||
'https:///path',
|
||||
policy: SchemePolicy.addressBarTyped,
|
||||
);
|
||||
|
||||
expect(uri, isNull);
|
||||
});
|
||||
});
|
||||
|
||||
group('parseSchemelessWebHost', () {
|
||||
test('upgrades domain to https', () {
|
||||
final uri = parseSchemelessWebHost('weblibre.eu');
|
||||
|
||||
expect(uri, isNotNull);
|
||||
expect(uri!.toString(), 'https://weblibre.eu');
|
||||
});
|
||||
|
||||
test('upgrades localhost to http', () {
|
||||
final uri = parseSchemelessWebHost('localhost:8080');
|
||||
|
||||
expect(uri, isNotNull);
|
||||
expect(uri!.toString(), 'http://localhost:8080');
|
||||
});
|
||||
|
||||
test('rejects spaces in host candidate', () {
|
||||
expect(parseSchemelessWebHost('foo bar.com'), isNull);
|
||||
});
|
||||
|
||||
test('rejects invalid port range', () {
|
||||
expect(parseSchemelessWebHost('weblibre.eu:99999'), isNull);
|
||||
});
|
||||
});
|
||||
|
||||
group('parseUserInputUrl', () {
|
||||
test('parses schemeless host only when enabled', () {
|
||||
expect(
|
||||
parseUserInputUrl('weblibre.eu', policy: SchemePolicy.addressBarTyped),
|
||||
isNull,
|
||||
);
|
||||
|
||||
expect(
|
||||
parseUserInputUrl(
|
||||
'weblibre.eu',
|
||||
policy: SchemePolicy.addressBarTyped,
|
||||
allowSchemelessHosts: true,
|
||||
),
|
||||
isNotNull,
|
||||
);
|
||||
});
|
||||
|
||||
test('rejects control chars', () {
|
||||
expect(
|
||||
parseUserInputUrl(
|
||||
'example.com\x00path',
|
||||
policy: SchemePolicy.addressBarTyped,
|
||||
allowSchemelessHosts: true,
|
||||
),
|
||||
isNull,
|
||||
);
|
||||
});
|
||||
|
||||
test('allows long persisted urls when max length is not enforced', () {
|
||||
final longPath = 'a' * 5000;
|
||||
final uri = parseUserInputUrl(
|
||||
'https://weblibre.eu/$longPath',
|
||||
policy: SchemePolicy.addressBarTyped,
|
||||
);
|
||||
|
||||
expect(uri, isNotNull);
|
||||
});
|
||||
|
||||
test('rejects long user input urls when max length is enforced', () {
|
||||
final longPath = 'a' * 5000;
|
||||
final uri = parseUserInputUrl(
|
||||
'https://weblibre.eu/$longPath',
|
||||
policy: SchemePolicy.addressBarTyped,
|
||||
enforceMaxInputLength: true,
|
||||
);
|
||||
|
||||
expect(uri, isNull);
|
||||
});
|
||||
});
|
||||
|
||||
group('redactUriCredentials', () {
|
||||
test('strips userInfo from URI', () {
|
||||
final uri = Uri.parse('https://user:pass@example.com/path');
|
||||
final redacted = redactUriCredentials(uri);
|
||||
|
||||
expect(redacted.userInfo, isEmpty);
|
||||
expect(redacted.host, 'example.com');
|
||||
expect(redacted.path, '/path');
|
||||
expect(redacted.toString(), 'https://example.com/path');
|
||||
});
|
||||
|
||||
test('is no-op for URIs without credentials', () {
|
||||
final uri = Uri.parse('https://example.com/path');
|
||||
final redacted = redactUriCredentials(uri);
|
||||
|
||||
expect(identical(redacted, uri), isTrue);
|
||||
});
|
||||
});
|
||||
|
||||
group('isValidHostCandidate', () {
|
||||
test('rejects single-label hosts', () {
|
||||
expect(isValidHostCandidate('example'), isFalse);
|
||||
expect(isValidHostCandidate('intranet'), isFalse);
|
||||
});
|
||||
});
|
||||
|
||||
group('containsControlChars', () {
|
||||
test('detects null bytes', () {
|
||||
expect(containsControlChars('example\x00.com'), isTrue);
|
||||
});
|
||||
|
||||
test('detects C1 control chars', () {
|
||||
expect(containsControlChars('example\u0080.com'), isTrue);
|
||||
expect(containsControlChars('example\u009F.com'), isTrue);
|
||||
});
|
||||
|
||||
test('allows normal text', () {
|
||||
expect(containsControlChars('example.com'), isFalse);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user