CINXE.COM
230933 - move cookies to mozstorage
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta property="og:type" content="website"> <meta property="og:title" content="230933 - move cookies to mozstorage"> <meta property="og:url" content="https://bugzilla.mozilla.org/show_bug.cgi?id=230933"> <meta property="og:description" content="RESOLVED (dwitte) in Core - Networking: Cookies. Last updated 2008-07-01."> <meta name="twitter:label1" value="Type"> <meta name="twitter:data1" value="defect"> <meta name="twitter:label2" value="Priority"> <meta name="twitter:data2" value="--"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="color-scheme" content="dark light"> <meta name="generator" content="Bugzilla 20241126.1"> <meta name="bugzilla-global" content="dummy" id="bugzilla-global" data-bugzilla="{"api_token":"","config":{"basepath":"\/"},"constant":{"COMMENT_COLS":80},"param":{"maxattachmentsize":"10240","maxusermatches":"50","splinter_base":"\/page.cgi?id=splinter.html&ignore=\/","use_markdown":"1"},"string":{"TextEditor":{"command_bold":"Bold","command_bulleted_list":"Bulleted list","command_code":"Code","command_heading":"Heading","command_italic":"Italic","command_link":"Link","command_numbered_list":"Numbered list","command_quote":"Quote","comment_editor":"Comment Editor","edit":"Edit","etiquette_link":{"href":"page.cgi?id=etiquette.html","text":"Etiquette"},"guidelines_link":{"href":"page.cgi?id=bug-writing.html","text":"Bug Writing Guidelines"},"loading":"Loading…","markdown_link":{"href":"https:\/\/guides.github.com\/features\/mastering-markdown\/","text":"Markdown supported"},"preview":"Preview","preview_error":"Preview could not be loaded. Please try again later.","text_editor":"Text Editor","toolbar_label":"Markdown text-formatting toolbar"},"bug":"bug","bug_type_required":"You must select a Type for this bug","component_required":"You must select a Component for this bug","description_required":"You must enter a Description for this bug","short_desc_required":"You must enter a Summary for this bug","version_required":"You must select a Version for this bug"},"user":{"is_new":true,"login":""}}"> <meta name="google-site-verification" content="JYXIuR9cAlV7fLmglSrc_4UaJS6Wzh5Mdxiorqu5AQc" /> <title>230933 - move cookies to mozstorage</title> <link href="/static/v20241126.1/skins/standard/global.css" rel="stylesheet" type="text/css"><link href="/static/v20241126.1/extensions/BugModal/web/bug_modal.css" rel="stylesheet" type="text/css"><link href="/static/v20241126.1/js/jquery/plugins/contextMenu/contextMenu.css" rel="stylesheet" type="text/css"><link href="/static/v20241126.1/extensions/BMO/web/styles/bug_modal.css" rel="stylesheet" type="text/css"><link href="/static/v20241126.1/extensions/EditComments/web/styles/inline-comment-editor.css" rel="stylesheet" type="text/css"><link href="/static/v20241126.1/js/jquery/ui/jquery-ui-min.css" rel="stylesheet" type="text/css"><link href="/static/v20241126.1/js/jquery/ui/jquery-ui-structure-min.css" rel="stylesheet" type="text/css"><link href="/static/v20241126.1/js/jquery/ui/jquery-ui-theme-min.css" rel="stylesheet" type="text/css"><link href="/static/v20241126.1/skins/lib/prism.css" rel="stylesheet" type="text/css"><link href="/static/v20241126.1/extensions/Needinfo/web/styles/needinfo.css" rel="stylesheet" type="text/css"><link href="/static/v20241126.1/extensions/Review/web/styles/badge.css" rel="stylesheet" type="text/css"><link href="/static/v20241126.1/extensions/Review/web/styles/review.css" rel="stylesheet" type="text/css"><link href="/static/v20241126.1/skins/standard/text-editor.css" rel="stylesheet" type="text/css"> <script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/js/jquery/jquery-min.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/js/jquery/ui/jquery-ui-min.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/js/jquery/plugins/contextMenu/contextMenu-min.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/js/jquery/plugins/devbridgeAutocomplete/devbridgeAutocomplete-min.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/js/global.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/js/util.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/js/widgets.js"></script> <script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH">BUGZILLA.value_descs = JSON.parse('{\"bug_status\":{},\"resolution\":{\"\":\"---\"}}'); var tracking_flags_str = "{\"flags\":{\"tracking\":{\"cf_status_firefox134\":\"---\",\"cf_status_thunderbird_esr128\":\"---\",\"cf_status_firefox133\":\"---\",\"cf_tracking_firefox135\":\"---\",\"cf_tracking_thunderbird_esr128\":\"---\",\"cf_status_firefox_esr115\":\"---\",\"cf_tracking_firefox134\":\"---\",\"cf_tracking_firefox133\":\"---\",\"cf_status_thunderbird_esr115\":\"---\",\"cf_tracking_thunderbird_esr115\":\"---\",\"cf_status_firefox_esr128\":\"---\",\"cf_tracking_firefox_relnote\":\"---\",\"cf_status_firefox135\":\"---\",\"cf_tracking_firefox_esr128\":\"---\",\"cf_tracking_firefox_esr115\":\"---\"},\"project\":{\"cf_webcompat_priority\":\"---\",\"cf_performance_impact\":\"---\",\"cf_webcompat_score\":\"---\",\"cf_a11y_review_project_flag\":\"---\",\"cf_accessibility_severity\":\"---\"}},\"types\":[\"tracking\"],\"comments\":{\"cf_tracking_firefox134\":{\"?\":\"[Tracking Requested - why for this release]:\"},\"cf_tracking_firefox135\":{\"?\":\"[Tracking Requested - why for this release]:\"},\"cf_tracking_firefox_relnote\":{\"?\":\"Release Note Request (optional, but appreciated)\\n[Why is this notable]:\\n[Affects Firefox for Android]:\\n[Suggested wording]:\\n[Links (documentation, blog post, etc)]:\"},\"cf_tracking_firefox133\":{\"?\":\"[Tracking Requested - why for this release]:\"},\"cf_a11y_review_project_flag\":{\"requested\":\"Description:\\nPlease provide an explanation of the feature or change. Include a description of the user scenario in which it would be used and how the user would complete the task(s).\\nScreenshots and visual UI specs are welcome, but please include sufficient accompanying explanation so that blind members of the accessibility team are able to understand the feature\/change.\\n\\nHow do we test this?\\nIf there is an implementation to test, please provide instructions for testing it; e.g. setting preferences, other preparation, how to trigger the UI, etc.\\n\\nWhen will this ship?\\nTracking bug\/issue:\\nDesign documents (e.g. Product Requirements Document, UI spec):\\nEngineering lead:\\nProduct manager:\\n\\nThe accessibility team has developed the Mozilla Accessibility Release Guidelines which outline what is needed to make user interfaces accessible:\\nhttps:\/\/wiki.mozilla.org\/Accessibility\/Guidelines\\nPlease describe the accessibility guidelines you considered and what steps you\'ve taken to address them:\\n\\nDescribe any areas of concern to which you want the accessibility team to give special attention:\"},\"cf_tracking_firefox_esr115\":{\"?\":\"[Tracking Requested - why for this release]:\"},\"cf_tracking_firefox_esr128\":{\"?\":\"[Tracking Requested - why for this release]:\"}}}"; var TrackingFlags = $.parseJSON(tracking_flags_str); BUGZILLA.bug_id = 230933; BUGZILLA.bug_title = '230933 - move cookies to mozstorage'; BUGZILLA.bug_summary = 'move cookies to mozstorage'; BUGZILLA.bug_url = 'https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=230933'; BUGZILLA.bug_keywords = '', BUGZILLA.bug_secure = false; BUGZILLA.user = { id: 0, login: '', is_insider: false, is_timetracker: false, can_tag: false, can_triage: false, timezone: 'America\/Los_Angeles', settings: { quote_replies: 'quoted_reply', zoom_textareas: true, remember_collapsed: true, inline_attachments: true, autosize_comments: false } }; review_suggestions = { _mentors: [ ], 'Networking: Cookies': [ ], _end: 1 }; static_component = 'Networking: Cookies'; </script> <script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/js/text-editor.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/BugModal/web/autosize.min.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/ProdCompSearch/web/js/prod_comp_search.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/BugModal/web/attachments_overlay.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/BugModal/web/bug_modal.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/BugModal/web/comments.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/ComponentWatching/web/js/overlay.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/js/bugzilla-readable-status-min.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/js/field.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/js/comments.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/TrackingFlags/web/js/flags.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/BMO/web/js/firefox-crash-table.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/MozChangeField/web/js/severity-s1-priority-p1.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/MozChangeField/web/js/clear-tracking-priority-s1.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/MozChangeField/web/js/set-tracking-severity-s1.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/js/lib/prism.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/GoogleAnalytics/web/js/analytics.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/js/lib/md5.min.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/Review/web/js/badge.js"></script><script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/Review/web/js/review.js"></script> <link href="/static/v20241126.1/skins/lib/fontawesome.min.css" rel="stylesheet" type="text/css"> <link href="/static/v20241126.1/skins/lib/fontawesome-brands.min.css" rel="stylesheet" type="text/css"> <link href="/static/v20241126.1/skins/lib/fontawesome-solid.min.css" rel="stylesheet" type="text/css"> <link rel="search" type="application/opensearchdescription+xml" title="Bugzilla@Mozilla" href="/search_plugin.cgi"><link rel="shortcut icon" href="/extensions/BMO/web/images/favicon.ico"> <link rel="canonical" href="https://bugzilla.mozilla.org/show_bug.cgi?id=230933"> <link rel="shorturl" href="https://bugzilla.mozilla.org/230933"><meta name="google-analytics" content="UA-36116321-3" data-location="https://bugzilla.mozilla.org/bug/show-modal" data-title="230933 - move cookies to mozstorage"> <script async src="https://www.google-analytics.com/analytics.js"></script><meta name="robots" content="noarchive"> </head> <body class="bugzilla-mozilla-org skin-standard bug_modal"> <div id="wrapper"> <header id="header" role="banner" aria-label="Global Header"> <div class="inner" role="none"> <button type="button" class="iconic ghost" id="open-menu-drawer" aria-label="Open Site Menu"> <span class="icon" aria-hidden="true" data-icon="menu"></span> </button><div id="header-external-links" class="dropdown" role="none"> <button type="button" id="header-external-menu-button" class="dropdown-button minor" aria-label="Show Mozilla Menu" aria-expanded="false" aria-haspopup="true" aria-controls="header-external-menu"> <img src="/static/v20241126.1/extensions/BMO/web/images/moz-fav-one-color-white-rgb.svg" width="32" height="32" alt=""> </button> <ul class="dropdown-content right" id="header-external-menu" role="menu" aria-label="Mozilla Menu" style="display:none;"> <li role="none"> <a href="https://www.mozilla.org/" role="menuitem"> <span class="label" role="none">Mozilla Home</span> </a> </li> <li role="separator"></li> <li role="none"> <a href="https://www.mozilla.org/privacy/websites/" role="menuitem"> <span class="label" role="none">Privacy</span> </a> </li> <li role="none"> <a href="https://www.mozilla.org/privacy/websites/#cookies" role="menuitem"> <span class="label" role="none">Cookies</span> </a> </li> <li role="none"> <a href="https://www.mozilla.org/about/legal/" role="menuitem"> <span class="label" role="none">Legal</span> </a> </li> </ul> </div> <h1 id="header-title" class="title" role="none"> <a class="header-button" href="https://bugzilla.mozilla.org/home" title="Go to home page"> <span aria-label="Go to Bugzilla Home Page">Bugzilla</span> </a> </h1> <form id="header-search" class="quicksearch" action="/buglist.cgi" data-no-csrf role="search" aria-label="Search Bugs"> <button type="button" class="iconic ghost" id="show-searchbox" aria-label="Search Bugs"> <span class="icon" aria-hidden="true" data-icon="search"></span> </button> <div class="searchbox-outer dropdown" role="combobox" aria-label="Quick Search" aria-haspopup="listbox" aria-owns="header-search-dropdown" aria-expanded="false"> <span class="icon" aria-hidden="true" data-icon="search"></span> <input id="quicksearch_top" class="dropdown-button" name="quicksearch" autocomplete="off" value="" accesskey="s" placeholder="Search Bugs" title="Enter a bug number or some search terms" role="searchbox" aria-controls="header-search-dropdown" aria-label="Search Terms"><div id="header-search-dropdown" class="dropdown-content dropdown-panel right" role="listbox" style="display: none;"> <div id="header-search-dropdown-wrapper" role="none"> <section id="header-search-dropdown-help" role="group" aria-label="Help"> <footer role="none"> <a href="/page.cgi?id=quicksearch.html">Quick Search Tips</a> <a href="/query.cgi?format=advanced">Advanced Search</a> </footer> </section> </div> </div> </div> </form> <nav id="header-nav" role="menubar" aria-label="Site Links"> <ul class="links" role="none"><li role="none"> <a class="header-button" href="/describecomponents.cgi" title="Browse bugs by component" role="menuitem"> <span class="icon" aria-hidden="true" data-icon="category"></span> <span class="label" role="none">Browse</span> </a> </li> <li role="none"> <a class="header-button" href="/query.cgi?format=advanced" title="Search bugs using various criteria" role="menuitem"> <span class="icon" aria-hidden="true" data-icon="pageview"></span> <span class="label" role="none">Advanced Search</span> </a> </li> <li role="none"> <a class="header-button" href="/enter_bug.cgi" title="File a new bug" role="menuitem"> <span class="icon" aria-hidden="true" data-icon="add_box"></span> <span class="label" role="none">New Bug</span> </a> </li> </ul> <div class="dropdown" role="none"> <button type="button" id="header-tools-menu-button" class="header-button dropdown-button minor" title="More tools…" role="menuitem" aria-label="Show More Tools Menu" aria-expanded="false" aria-haspopup="true" aria-controls="header-tools-menu"> <span class="icon" aria-hidden="true" data-icon="more_horiz"></span> </button> <ul class="dropdown-content left" id="header-tools-menu" role="menu" aria-label="More Tools Menu" style="display:none;"><li role="none"> <a href="/report.cgi" role="menuitem"> <span class="icon" aria-hidden="true" data-icon="analytics"></span> <span class="label" role="none">Reports</span> </a> </li> <li role="separator"></li> <li role="none"> <a href="https://bmo.readthedocs.io/en/latest/" target="_blank" role="menuitem"> <span class="icon" aria-hidden="true" data-icon="help"></span> <span class="label" role="none">Documentation</span> </a> </li> </ul> </div> </nav> <ul id="header-login" class="links" role="none"><li id="mini_login_container_top" role="none"> <a id="login_link_top" href="/index.cgi?GoAheadAndLogIn=1" class='show_mini_login_form header-button' data-qs-suffix="_top" role="button"> <span class="icon" aria-hidden="true" data-icon="login"></span> <span class="label" role="none">Log In</span> </a> <div id="mini_login_top" class="mini-popup mini_login bz_default_hidden"> <form method="post" action="/github.cgi"> <input type="hidden" name="github_token" value="i2u5NDR6zq6MrrTOF46jrSS91PXu98H07ZdGXpUYw4XAERv9iClk3GAgMlgnOyNDHzxrGnvlEzXFaKiw7xyqwu2NmKogcqiFFaxkfArxTFrfYUVKMJ053uSBiRZ85EAn4z5tInyJ1cWfFfYw3yvFJvCHUAZ5yojk75ATM35pN80PmfnNb95ZKOqTYqoSxdOLRHK7T5YhA5GGPKgSKOYAOpBUyMvq1KYy9g9VQ5HnmGwtt5W2gX7NnY3Eyl6XzpQ9"> <input type="hidden" name="target_uri" value="https://bugzilla.mozilla.org/show_bug.cgi"> <button type="submit"> <i class="fab fa-github"></i> Log In with GitHub </button> </form> <div class="method-separator">or</div> <form action="/show_bug.cgi?id=230933" method="POST" data-qs-suffix="_top"> <input id="Bugzilla_login_top" class="bz_login" name="Bugzilla_login" title="Login" placeholder="Email" aria-label="Email" type="email" required > <input class="bz_password" id="Bugzilla_password_top" name="Bugzilla_password" type="password" title="Password" placeholder="Password" aria-label="Password" required > <input class="bz_password bz_default_hidden bz_mini_login_help" type="text" id="Bugzilla_password_dummy_top" value="password" title="Password" > <span class="remember-outer"> <input type="checkbox" id="Bugzilla_remember_top" name="Bugzilla_remember" value="on" class="bz_remember" checked> <label for="Bugzilla_remember_top">Remember me</label> </span> <input type="hidden" name="Bugzilla_login_token" value="1732688328-HzOOon0MsZamaM9oqRR3LyaPAmIY1-XVp-fWW30MZH8"> <input type="submit" name="GoAheadAndLogIn" value="Log In" id="log_in_top" class="check_mini_login_fields" data-qs-suffix="_top"> <a href="#" id="hide_mini_login_top" aria-label="Close" class="close-button hide_mini_login_form" data-qs-suffix="_top"> <span class="icon" aria-hidden="true"></span> </a> </form> <div class="footer"> <a href="/createaccount.cgi">Create an Account</a> · <a id="forgot_link_top" href="/index.cgi?GoAheadAndLogIn=1#forgot" class='show_forgot_form' data-qs-suffix="_top">Forgot Password</a> </div> </div> <div id="forgot_form_top" class="mini-popup mini_forgot bz_default_hidden"> <form action="/token.cgi" method="post"> <input type="email" name="loginname" size="20" placeholder="Email" aria-label="Email" required> <input id="forgot_button_top" value="Reset Password" type="submit"> <input type="hidden" name="a" value="reqpw"> <input type="hidden" id="token_top" name="token" value="1732688328-1kNu316-ySJBx7xl8qoPivYO74kE-S-Dtz9uuXHtEIs"> <a href="#" class="close-button hide_forgot_form" aria-label="Close" data-qs-suffix="_top"> <span class="icon" aria-hidden="true"></span> </a> </form> </div> </li> </ul> </div> <dialog id="menu-drawer" inert aria-label="Site Menu"> <div class="drawer-inner" role="none"> <div class="header" role="none"> <button type="button" class="iconic ghost" id="close-menu-drawer" aria-label="Close Site Menu"> <span class="icon" aria-hidden="true" data-icon="close"></span> </button> </div> <ul role="menu" aria-label="Site Links"><li role="none"> <a class="header-button" href="/describecomponents.cgi" title="Browse bugs by component" role="menuitem"> <span class="icon" aria-hidden="true" data-icon="category"></span> <span class="label" role="none">Browse</span> </a> </li> <li role="none"> <a class="header-button" href="/query.cgi?format=advanced" title="Search bugs using various criteria" role="menuitem"> <span class="icon" aria-hidden="true" data-icon="pageview"></span> <span class="label" role="none">Advanced Search</span> </a> </li> <li role="none"> <a class="header-button" href="/enter_bug.cgi" title="File a new bug" role="menuitem"> <span class="icon" aria-hidden="true" data-icon="add_box"></span> <span class="label" role="none">New Bug</span> </a> </li><li role="none"> <a href="/report.cgi" role="menuitem"> <span class="icon" aria-hidden="true" data-icon="analytics"></span> <span class="label" role="none">Reports</span> </a> </li> <li role="separator"></li> <li role="none"> <a href="https://bmo.readthedocs.io/en/latest/" target="_blank" role="menuitem"> <span class="icon" aria-hidden="true" data-icon="help"></span> <span class="label" role="none">Documentation</span> </a> </li> </ul> </div> </dialog> </header> <main id="bugzilla-body" tabindex="-1"> <aside id="message-container" role="complementary"> <noscript> <div class="noscript"> <div class="inner"> <p>Please enable JavaScript in your browser to use all the features on this site.</p> </div> </div> </noscript> </aside> <div id="main-inner"> <div role="toolbar" id="page-toolbar"> <div role="group" class="buttons"> <button type="button" id="copy-summary" class="secondary separate-dropdown-button-main" title="Copy bug number and summary to your clipboard">Copy Summary</button ><div id="copy-menu-dropdown" class="dropdown"><button type="button" id="copy-menu-btn" aria-haspopup="true" aria-label="View" aria-expanded="false" aria-controls="copy-menu" class="dropdown-button secondary separate-dropdown-button-arrow" title="More options for copy">▾</button> <ul class="dropdown-content left" id="copy-menu" role="menu" style="display:none;"> <li role="presentation"> <a id="copy-markdown-summary" role="menuitem" tabindex="-1">Markdown</a> </li> <li role="presentation"> <a id="copy-markdown-bug-number" role="menuitem" tabindex="-1">Markdown (bug number)</a> </li> <li role="presentation"> <a id="copy-text-summary" role="menuitem" tabindex="-1">Plain Text</a> </li> <li role="presentation"> <a id="copy-html-summary" role="menuitem" tabindex="-1">HTML</a> </li> </ul> </div> <div id="clip-container" style="display:none"><input type="text" id="clip"></div> <div class="dropdown"> <button type="button" id="action-menu-btn" aria-haspopup="true" aria-label="View" aria-expanded="false" aria-controls="action-menu" class="dropdown-button secondary">View ▾</button> <ul class="dropdown-content left" id="action-menu" role="menu" style="display:none;"> <li role="presentation"> <a id="action-reset" role="menuitem" tabindex="-1">Reset Sections</a> </li> <li role="presentation"> <a id="action-expand-all" role="menuitem" tabindex="-1">Expand All Sections</a> </li> <li role="presentation"> <a id="action-collapse-all" role="menuitem" tabindex="-1">Collapse All Sections</a> </li> <li role="separator"></li> <li role="presentation"> <a id="action-history" role="menuitem" tabindex="-1">History</a> </li> <li role="separator"></li> <li role="presentation"> <a href="/rest/bug/230933" role="menuitem" tabindex="-1">JSON</a> </li> <li role="presentation"> <a href="/show_bug.cgi?ctype=xml&id=230933" role="menuitem" tabindex="-1">XML</a> </li> </ul> </div> </div> </div> <div role="status" id="io-error" style="display:none"></div> <div role="status" id="floating-message" style="display:none"> <div id="floating-message-text"></div> </div> <section class="module" > <div class="module-content" > <div id="summary-container"> <div class="field bug_modal indent" id="field-status_summary" > <div class=" container"> <span id="field-value-status_summary"> <span class="bug-status-label text" data-status="closed">Closed</span> <span id="field-value-bug_id"> <a href="/show_bug.cgi?id=230933">Bug 230933</a> </span> <span class="bug-time-labels"> <span class="bug-time-label">Opened <span class="rel-time" title="2004-01-14 15:07 PST" data-time="1074121633">21 years ago</span></span> <span class="bug-time-label">Closed <span class="rel-time" title="2007-06-17 15:25 PDT" data-time="1182119159">17 years ago</span></span> </span> </span> </div> </div> <div class="field bug_modal indent edit-hide" > <div class=" container"> <h1 id="field-value-short_desc">move cookies to mozstorage</h1> </div> </div> <div class="field bug_modal edit-show" id="field-short_desc" style="display:none" > <div class="name"> <span class="required_star edit-show" style="display:none" aria-label="Required Field">*</span> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#short_desc" id="short_desc-help-link" class="help">Summary: </a> </div> <div class="value"> <span id="field-value-short_desc"> move cookies to mozstorage </span> </div> </div> </div> </div> </section> <section class="module" id="module-categories" > <header id="module-categories-header" class="module-header"> <div class="module-latch" data-label-expanded="Collapse Categories section" data-label-collapsed="Expand Categories section"> <div class="module-spinner" role="button" tabindex="0" aria-controls="module-categories-content" aria-expanded="true" aria-labeledby="module-categories-title" aria-describedby="module-categories-subtitle"></div> <h2 class="module-title" id="module-categories-title">Categories</h2> <h3 class="module-subtitle" id="module-categories-subtitle"> (Core :: Networking: Cookies, defect) </h3> </div> </header> <div class="module-content" id="module-categories-content" ><div class="fields-lhs"> <div class="field bug_modal" id="field-product" > <div class="name"> <a href="/describecomponents.cgi?product=Core" id="product-help-link" class="help">Product: </a> </div> <div class="value"> <span id="field-value-product"> <div class="name-info-outer dropdown"> <span id="product-name" class="dropdown-button" tabindex="0" role="button" aria-haspopup="menu" aria-controls="product-info">Core <span class="icon" aria-hidden="true">▾</span> </span> <aside id="product-info" class="name-info-popup dropdown-content right hover-display" hidden role="menu" aria-label="Product description and actions"> <header> <div class="title">Core</div> <div class="description">Shared components used by Firefox and other Mozilla software, including handling of Web content; Gecko, HTML, CSS, layout, DOM, scripts, images, networking, etc. Issues with web page layout probably go here, while Firefox user interface issues belong in the <a href="https://bugzilla.mozilla.org/describecomponents.cgi?product=Firefox">Firefox</a> product. (<a href="https://wiki.mozilla.org/Modules/All#Core">More info</a>)</div> </header> <li role="separator"></li> <div class="actions"> <div><a href="/buglist.cgi?product=Core&bug_status=__open__" target="_blank" role="menuitem" tabindex="-1">See Open Bugs in This Product</a></div> <div><a href="/enter_bug.cgi?product=Core" target="_blank" role="menuitem" tabindex="-1">File New Bug in This Product</a></div> <div><button disabled type="button" class="secondary component-watching" role="menuitem" tabindex="-1" data-product="Core" data-label-watch="Watch This Product" data-label-unwatch="Unwatch This Product" data-source="BugModal">Watch This Product</button></div> </div> </aside> </div> </span> </div> </div> <div class="field bug_modal" id="field-component" > <div class="name"> <a href="/describecomponents.cgi?product=Core&component=Networking%3A%20Cookies#Networking%3A%20Cookies" id="component-help-link" class="help">Component: </a> </div> <div class="value"> <span id="field-value-component"> <div class="name-info-outer dropdown"> <span id="component-name" class="dropdown-button" tabindex="0" role="button" aria-haspopup="menu" aria-controls="component-info">Networking: Cookies <span class="icon" aria-hidden="true">▾</span> </span> <aside id="component-info" class="name-info-popup dropdown-content right hover-display" hidden role="menu" aria-label="Component description and actions"> <header> <div class="title">Core :: Networking: Cookies</div> <div class="description">A general mechanism which server side connections (such as CGI scripts) can use to both store and retrieve information on the client side of the connection. This refers to HTML cookies; little blobs of data we store and share with sites</div> </header> <li role="separator"></li> <div class="actions"> <div><a href="/buglist.cgi?product=Core&component=Networking%3A%20Cookies&bug_status=__open__" target="_blank" role="menuitem" tabindex="-1">See Open Bugs in This Component</a></div> <div><a href="/buglist.cgi?product=Core&component=Networking%3A%20Cookies&chfield=resolution&chfieldfrom=-6m&chfieldvalue=FIXED&bug_status=__closed__" target="_blank" role="menuitem" tabindex="-1">Recently Fixed Bugs in This Component</a></div> <div><a href="/enter_bug.cgi?product=Core&component=Networking%3A%20Cookies" target="_blank" role="menuitem" tabindex="-1">File New Bug in This Component</a></div> <div><button disabled type="button" class="secondary component-watching" role="menuitem" tabindex="-1" data-product="Core" data-component="Networking: Cookies" data-label-watch="Watch This Component" data-label-unwatch="Unwatch This Component" data-source="BugModal">Watch This Component</button></div> </div> </aside> </div> </span> </div> </div> <div class="field bug_modal edit-show" id="field-version" style="display:none" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#version" id="version-help-link" class="help">Version: </a> </div> <div class="value"> <span id="field-value-version"> Trunk </span> </div> </div> <div class="field bug_modal" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#rep_platform" id="-help-link" class="help">Platform: </a> </div> <div class=" container"><div class="field bug_modal inline" id="field-rep_platform" > <div class="value"> <span id="field-value-rep_platform"> x86 </span> </div> </div><div class="field bug_modal indent inline" id="field-op_sys" > <div class="value"> <span id="field-value-op_sys"> All </span> </div> </div><div class="field bug_modal" > <div class=" container"> </div> </div> </div> </div> </div><div class="fields-rhs"> <div class="field bug_modal contains-buttons" id="field-bug_type" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#bug_type" id="bug_type-help-link" class="help">Type: </a> </div> <div class="value"> <span id="field-value-bug_type"> <span class="bug-type-label iconic-text" data-type="defect"> <span class="icon" aria-hidden="true"></span>defect</span> </span> </div> </div> <div class="field bug_modal" id="field-importance" > <div class=" container"> <span id="field-value-importance"><div class="field bug_modal inline" id="field-priority" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#priority" id="priority-help-link" class="help">Priority: </a> </div> <div class="value"> <span id="field-value-priority"> <em>Not set</em> </span> </div> </div><div class="field bug_modal inline" id="field-bug_severity" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#bug_severity" id="bug_severity-help-link" class="help">Severity: </a> </div> <div class="value"> <span id="field-value-bug_severity"> normal </span> </div> </div> </span> </div> </div> <div class="field bug_modal edit-show" id="field-cf_fx_points" style="display:none" > <div class="name"> Points: </div> <div class="value"> <span id="field-value-cf_fx_points"> --- </span> </div> </div> </div> </div> </section> <section class="module" id="module-tracking" > <header id="module-tracking-header" class="module-header"> <div class="module-latch" data-label-expanded="Collapse Tracking section" data-label-collapsed="Expand Tracking section"> <div class="module-spinner" role="button" tabindex="0" aria-controls="module-tracking-content" aria-expanded="true" aria-labeledby="module-tracking-title" aria-describedby="module-tracking-subtitle"></div> <h2 class="module-title" id="module-tracking-title">Tracking</h2> <h3 class="module-subtitle" id="module-tracking-subtitle"> (<span id="readable-bug-status" data-readable-bug-status="{"cf_status_firefox_esr115":"---","cf_tracking_firefox134":"---","id":230933,"cf_status_firefox133":"---","cf_status_thunderbird_esr128":"---","cf_tracking_firefox_relnote":"---","cf_tracking_thunderbird_esr115":"---","dupe_of":null,"cf_status_thunderbird_esr115":"---","cf_tracking_firefox133":"---","target_milestone":"mozilla1.9alpha6","keywords":[],"priority":"--","flags":[{"status":"-","name":"in-testsuite"}],"cf_status_firefox135":"---","cf_webcompat_priority":"---","cf_performance_impact":"---","cf_tracking_thunderbird_esr128":"---","cf_tracking_firefox135":"---","cf_status_firefox134":"---","cf_webcompat_score":"---","cf_a11y_review_project_flag":"---","status":"RESOLVED","resolution":"FIXED","cf_accessibility_severity":"---","cf_status_firefox_esr128":"---","cf_tracking_firefox_esr115":"---","cf_tracking_firefox_esr128":"---"}"></span>) </h3> </div> </header> <div class="module-content" id="module-tracking-content" ><div class="fields-lhs"> <div class="field bug_modal edit-hide" id="field-status-view" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugStatuses" id="status-view-help-link" class="help">Status: </a> </div> <div class=" container"> <span id="field-value-status-view">RESOLVED FIXED </span> </div> </div> <div class="field bug_modal edit-show" id="field-status-edit" style="display:none" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugStatuses" id="status-edit-help-link" class="help">Status: </a> </div> <div class=" container"> <span id="field-value-status-edit"><div class="field bug_modal inline" id="field-bug_status" > <div class="value"> <span id="field-value-bug_status"> RESOLVED </span> </div> </div><div class="field bug_modal indent inline" id="field-resolution" > <div class="value"> <span id="field-value-resolution"> FIXED </span> </div> </div> <div id="status-action-buttons"> <div id="assigned-container" style="display:none"> <button type="button" class="secondary" id="mark-as-assigned-btn"> Mark as Assigned </button> </div> </div> </span> </div> </div> <div class="field bug_modal" id="field-target_milestone" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#target_milestone" id="target_milestone-help-link" class="help">Milestone: </a> </div> <div class="value"> <span id="field-value-target_milestone"> mozilla1.9alpha6 </span> </div> </div> <div class="field bug_modal edit-show" id="field-cf_fx_iteration" style="display:none" > <div class="name"> Iteration: </div> <div class="value"> <span id="field-value-cf_fx_iteration"> --- </span> </div> </div> <div class="field bug_modal edit-show" style="display:none" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide#Project_Flags" id="-help-link" class="help">Project Flags: </a> </div> <div class=" container"><div class="flags edit-show" style="display:none"> <table class="layout-table tracking-flags"> <tr> <td class="tracking-flag-name">a11y-review</td> <td class="tracking-flag-status"><input type="hidden" id="cf_a11y_review_project_flag-dirty"> <select id="cf_a11y_review_project_flag" name="cf_a11y_review_project_flag"> <option value="---" id="v4876_cf_a11y_review_project_flag" selected >--- </option> </select></td> </tr> <tr> <td class="tracking-flag-name">Webcompat Score</td> <td class="tracking-flag-status"><input type="hidden" id="cf_webcompat_score-dirty"> <select id="cf_webcompat_score" name="cf_webcompat_score"> <option value="---" id="v6757_cf_webcompat_score" selected >--- </option> </select></td> </tr> <tr> <td class="tracking-flag-name">Webcompat Priority</td> <td class="tracking-flag-status"><input type="hidden" id="cf_webcompat_priority-dirty"> <select id="cf_webcompat_priority" name="cf_webcompat_priority"> <option value="---" id="v4274_cf_webcompat_priority" selected >--- </option> </select></td> </tr> <tr> <td class="tracking-flag-name">Accessibility Severity</td> <td class="tracking-flag-status"><input type="hidden" id="cf_accessibility_severity-dirty"> <select id="cf_accessibility_severity" name="cf_accessibility_severity"> <option value="---" id="v6045_cf_accessibility_severity" selected >--- </option> </select></td> </tr> <tr> <td class="tracking-flag-name">Performance Impact</td> <td class="tracking-flag-status"><input type="hidden" id="cf_performance_impact-dirty"> <select id="cf_performance_impact" name="cf_performance_impact"> <option value="---" id="v5427_cf_performance_impact" selected >--- </option> </select></td> </tr> </table> </div> </div> </div> </div><div class="fields-rhs"> <div class="field tracking-flags-wrapper edit-show" style="display:none" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide#Tracking_Flags" id="-help-link" class="help">Tracking Flags: </a> </div> <div class=" container"><div class="flags edit-show" style="display:none"> <table class="layout-table tracking-flags"> <tr> <th></th> <th>Tracking</th> <th>Status</th> </tr> <tr> <td class="tracking-flag-name">relnote-firefox</td> <td class="tracking-flag-tracking"></td> <td class="tracking-flag-status"><input type="hidden" id="cf_tracking_firefox_relnote-dirty"> <select id="cf_tracking_firefox_relnote" name="cf_tracking_firefox_relnote"> <option value="---" id="v539_cf_tracking_firefox_relnote" selected >--- </option> </select></td> </tr> <tr> <td class="tracking-flag-name">thunderbird_esr115</td> <td class="tracking-flag-tracking"><input type="hidden" id="cf_tracking_thunderbird_esr115-dirty"> <select id="cf_tracking_thunderbird_esr115" name="cf_tracking_thunderbird_esr115"> <option value="---" id="v6094_cf_tracking_thunderbird_esr115" selected >--- </option> </select></td> <td class="tracking-flag-status"><input type="hidden" id="cf_status_thunderbird_esr115-dirty"> <select id="cf_status_thunderbird_esr115" name="cf_status_thunderbird_esr115"> <option value="---" id="v6100_cf_status_thunderbird_esr115" selected >--- </option> </select></td> </tr> <tr> <td class="tracking-flag-name">thunderbird_esr128</td> <td class="tracking-flag-tracking"><input type="hidden" id="cf_tracking_thunderbird_esr128-dirty"> <select id="cf_tracking_thunderbird_esr128" name="cf_tracking_thunderbird_esr128"> <option value="---" id="v6557_cf_tracking_thunderbird_esr128" selected >--- </option> </select></td> <td class="tracking-flag-status"><input type="hidden" id="cf_status_thunderbird_esr128-dirty"> <select id="cf_status_thunderbird_esr128" name="cf_status_thunderbird_esr128"> <option value="---" id="v6576_cf_status_thunderbird_esr128" selected >--- </option> </select></td> </tr> <tr> <td class="tracking-flag-name">firefox-esr115</td> <td class="tracking-flag-tracking"><input type="hidden" id="cf_tracking_firefox_esr115-dirty"> <select id="cf_tracking_firefox_esr115" name="cf_tracking_firefox_esr115"> <option value="---" id="v6079_cf_tracking_firefox_esr115" selected >--- </option> </select></td> <td class="tracking-flag-status"><input type="hidden" id="cf_status_firefox_esr115-dirty"> <select id="cf_status_firefox_esr115" name="cf_status_firefox_esr115"> <option value="---" id="v6084_cf_status_firefox_esr115" selected >--- </option> </select></td> </tr> <tr> <td class="tracking-flag-name">firefox-esr128</td> <td class="tracking-flag-tracking"><input type="hidden" id="cf_tracking_firefox_esr128-dirty"> <select id="cf_tracking_firefox_esr128" name="cf_tracking_firefox_esr128"> <option value="---" id="v6501_cf_tracking_firefox_esr128" selected >--- </option> </select></td> <td class="tracking-flag-status"><input type="hidden" id="cf_status_firefox_esr128-dirty"> <select id="cf_status_firefox_esr128" name="cf_status_firefox_esr128"> <option value="---" id="v6505_cf_status_firefox_esr128" selected >--- </option> </select></td> </tr> <tr> <td class="tracking-flag-name">firefox133</td> <td class="tracking-flag-tracking"><input type="hidden" id="cf_tracking_firefox133-dirty"> <select id="cf_tracking_firefox133" name="cf_tracking_firefox133"> <option value="---" id="v6686_cf_tracking_firefox133" selected >--- </option> </select></td> <td class="tracking-flag-status"><input type="hidden" id="cf_status_firefox133-dirty"> <select id="cf_status_firefox133" name="cf_status_firefox133"> <option value="---" id="v6691_cf_status_firefox133" selected >--- </option> </select></td> </tr> <tr> <td class="tracking-flag-name">firefox134</td> <td class="tracking-flag-tracking"><input type="hidden" id="cf_tracking_firefox134-dirty"> <select id="cf_tracking_firefox134" name="cf_tracking_firefox134"> <option value="---" id="v6773_cf_tracking_firefox134" selected >--- </option> </select></td> <td class="tracking-flag-status"><input type="hidden" id="cf_status_firefox134-dirty"> <select id="cf_status_firefox134" name="cf_status_firefox134"> <option value="---" id="v6778_cf_status_firefox134" selected >--- </option> </select></td> </tr> <tr> <td class="tracking-flag-name">firefox135</td> <td class="tracking-flag-tracking"><input type="hidden" id="cf_tracking_firefox135-dirty"> <select id="cf_tracking_firefox135" name="cf_tracking_firefox135"> <option value="---" id="v6816_cf_tracking_firefox135" selected >--- </option> </select></td> <td class="tracking-flag-status"><input type="hidden" id="cf_status_firefox135-dirty"> <select id="cf_status_firefox135" name="cf_status_firefox135"> <option value="---" id="v6821_cf_status_firefox135" selected >--- </option> </select></td> </tr> </table> </div> </div> </div> </div> </div> </section> <section class="module" id="module-people" > <header id="module-people-header" class="module-header"> <div class="module-latch" data-label-expanded="Collapse People section" data-label-collapsed="Expand People section"> <div class="module-spinner" role="button" tabindex="0" aria-controls="module-people-content" aria-expanded="false" aria-labeledby="module-people-title" aria-describedby="module-people-subtitle"></div> <h2 class="module-title" id="module-people-title">People</h2> <h3 class="module-subtitle" id="module-people-subtitle"> (Reporter: mvl, Assigned: dwitte) </h3> </div> </header> <div class="module-content" id="module-people-content" style="display:none" ><div class="fields-lhs"> <div class="field bug_modal edit-hide" id="field-assigned_to" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#assigned_to" id="assigned_to-help-link" class="help">Assignee: </a> </div> <div class="value"> <span id="field-value-assigned_to"><div class="vcard vcard_75420" ><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=40" class="gravatar" width="20" height="20"> <a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte</span></a> </div> </span> </div> </div><div class="field bug_modal edit-show" id="field-assigned_to" style="display:none" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#assigned_to" id="assigned_to-help-link" class="help">Assignee: </a> </div> <div class="value"> <span id="field-value-assigned_to"> <div class="set-default-container" style="display:none"> <input type="checkbox" id="set-default-assignee" name="set_default_assignee" class="set-default" value="1" data-for="assigned_to"> <label for="set-default-assignee">Reset Assignee to default</label> </div> </span> </div> </div> <div class="field bug_modal edit-show" id="field-bug_mentors" style="display:none" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#bug_mentor" id="bug_mentors-help-link" class="help">Mentors: </a> </div> <div class="value"> <span id="field-value-bug_mentors">--- </span> </div> </div> <div class="field bug_modal edit-show" id="field-qa_contact" style="display:none" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#qa_contact" id="qa_contact-help-link" class="help">QA Contact: </a> </div> <div class="value"> <span id="field-value-qa_contact"> <div class="set-default-container" style="display:none"> <input type="checkbox" id="set-default-qa-contact" name="set_default_qa_contact" class="set-default" value="1" data-for="qa_contact"> <label for="set-default-qa-contact">Reset QA Contact to default</label> </div> </span> </div> </div> </div><div class="fields-rhs"> <div class="field bug_modal" id="field-reporter" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#reporter" id="reporter-help-link" class="help">Reporter: </a> </div> <div class="value"> <span id="field-value-reporter"> <div class="vcard vcard_23175" ><img src="https://secure.gravatar.com/avatar/32a640951edadeeb587abdd44a025ee1?d=mm&size=40" class="gravatar" width="20" height="20"> <a class="email disabled" href="/user_profile?user_id=23175" > <span class="fna">mvl</span></a> </div> </span> </div> </div> <div class="field bug_modal" id="field-triage_owner" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#triage_owner" id="triage_owner-help-link" class="help">Triage Owner: </a> </div> <div class="value"> <span id="field-value-triage_owner"> <div class="vcard vcard_711499" ><img src="https://secure.gravatar.com/avatar/b032108dab3ccfada1140fb485c6e182?d=mm&size=40" class="gravatar" width="20" height="20"> <a class="email " href="/user_profile?user_id=711499" > <span class="fna">smayya</span></a> </div> </span> </div> </div> <div class="field bug_modal" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#cc" id="-help-link" class="help">CC: </a> </div> <div class=" container"> <span aria-owns="cc-summary cc-latch"> <span role="button" tabindex="0" id="cc-summary" data-count="25">25 people </span> </span> <div id="cc-list" style="display:none"></div> </div> </div> </div> </div> </section> <section class="module" id="module-references" > <header id="module-references-header" class="module-header"> <div class="module-latch" data-label-expanded="Collapse References section" data-label-collapsed="Expand References section"> <div class="module-spinner" role="button" tabindex="0" aria-controls="module-references-content" aria-expanded="false" aria-labeledby="module-references-title" aria-describedby="module-references-subtitle"></div> <h2 class="module-title" id="module-references-title">References</h2> <h3 class="module-subtitle" id="module-references-subtitle"> (Blocks 1 open bug) </h3> </div> </header> <div class="module-content" id="module-references-content" style="display:none" ><div class="fields-lhs"> <div class="field bug_modal bug-list" id="field-dependson" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#dependson" id="dependson-help-link" class="help">Depends on: </a> </div> <div class="value"> <span id="field-value-dependson"> <div class="bug-list"> <span class="bug-type-label iconic" title="defect" aria-label="defect" data-type="defect"> <span class="icon" aria-hidden="true"></span> </span><a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED INVALID - "profile-do-change" event does not cause cookie table reload" href="/show_bug.cgi?id=439384">439384</a> </div> </span> </div> </div><div class="field bug_modal bug-list" id="field-blocked" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#blocks" id="blocked-help-link" class="help">Blocks: </a> </div> <div class="value"> <span id="field-value-blocked"> <div class="bug-list"> <span class="bug-type-label iconic" title="defect" aria-label="defect" data-type="defect"> <span class="icon" aria-hidden="true"></span> </span><a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED DUPLICATE - Cookies should be overwritten last-recent-first" href="/show_bug.cgi?id=348008">348008</a> </div> <div class="bug-list"> <span class="bug-type-label iconic" title="enhancement" aria-label="enhancement" data-type="enhancement"> <span class="icon" aria-hidden="true"></span> </span><a class="bz_bug_link bz_status_NEW" title="NEW - [RFE] Add creation time and httponly fields to cookie manager" href="/show_bug.cgi?id=201936">201936</a>, <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - MSIE-extension: HttpOnly cookie attribute for cross-site scripting vulnerability prevention" href="/show_bug.cgi?id=178993">178993</a>, <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED WONTFIX - Set-Cookie2: not accepted (RFC 2965)" href="/show_bug.cgi?id=208985">208985</a>, <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED DUPLICATE - cookie manager: add date created, date last modified, count # modifications" href="/show_bug.cgi?id=236133">236133</a>, <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - persist cookie creation time across sessions" href="/show_bug.cgi?id=248590">248590</a> </div> </span> </div> </div><div class="field bug_modal" id="field-dependencytree" > <div class="name"> </div> <div class=" container"> <span id="field-value-dependencytree"> Dependency <a href="/showdependencytree.cgi?id=230933&hide_resolved=1">tree</a> / <a href="/showdependencygraph.cgi?id=230933">graph</a> </span> </div> </div> <div class="field bug_modal bug-list edit-show" id="field-regresses" style="display:none" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#regresses" id="regresses-help-link" class="help">Regressions: </a> </div> <div class="value"> <span id="field-value-regresses"> --- </span> </div> </div><div class="field bug_modal bug-list edit-show" id="field-regressed_by" style="display:none" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#regressed_by" id="regressed_by-help-link" class="help">Regressed by: </a> </div> <div class="value"> <span id="field-value-regressed_by"> --- </span> </div> </div> </div><div class="fields-rhs"> <div class="field bug_modal edit-show" id="field-bug_file_loc" style="display:none" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#bug_file_loc" id="bug_file_loc-help-link" class="help">URL: </a> </div> <div class="value"> <span id="field-value-bug_file_loc"><div class="link"> <a href="" target="_blank" rel="noreferrer" title="" class="bug-url" data-safe="0"></a> </div> </span> </div> </div> <div class="field bug_modal edit-show" id="field-see_also" style="display:none" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#see_also" id="see_also-help-link" class="help">See Also: </a> </div> <div class="value"> <span id="field-value-see_also"> --- </span> </div> </div> </div> </div> </section> <section class="module" id="module-details" > <header id="module-details-header" class="module-header"> <div class="module-latch" data-label-expanded="Collapse Details section" data-label-collapsed="Expand Details section"> <div class="module-spinner" role="button" tabindex="0" aria-controls="module-details-content" aria-expanded="false" aria-labeledby="module-details-title" aria-describedby="module-details-subtitle"></div> <h2 class="module-title" id="module-details-title">Details</h2> </div> </header> <div class="module-content" id="module-details-content" style="display:none" ><div class="fields-lhs"> <div class="field bug_modal edit-show" id="field-alias" style="display:none" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#alias" id="alias-help-link" class="help">Alias: </a> </div> <div class="value"> <span id="field-value-alias"> --- </span> </div> </div> <div class="field bug_modal edit-show" id="field-keywords" style="display:none" > <div class="name"> <a href="/describekeywords.cgi" id="keywords-help-link" class="help">Keywords: </a> </div> <div class="value"> <span id="field-value-keywords">--- </span> </div> </div> <div class="field bug_modal edit-show" id="field-status_whiteboard" style="display:none" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/Whiteboard" id="status_whiteboard-help-link" class="help">Whiteboard: </a> </div> <div class="value"> <span id="field-value-status_whiteboard">--- </span> </div> </div><div class="field bug_modal edit-show" id="field-cf_qa_whiteboard" style="display:none" > <div class="name"> QA Whiteboard: </div> <div class="value"> <span id="field-value-cf_qa_whiteboard"> --- </span> </div> </div> <div class="field bug_modal edit-show" id="field-cf_has_str" style="display:none" > <div class="name"> Has STR: </div> <div class="value"> <span id="field-value-cf_has_str"> --- </span> </div> </div><div class="field bug_modal edit-show" id="field-cf_cab_review" style="display:none" > <div class="name"> Change Request: </div> <div class="value"> <span id="field-value-cf_cab_review"> --- </span> </div> </div> <div class="field bug_modal" id="field-votes" > <div class="name"> <a href="https://wiki.mozilla.org/BMO/UserGuide/BugFields#votes" id="votes-help-link" class="help">Votes: </a> </div> <div class=" container"> <span id="field-value-votes">2 </span> </div> </div> </div><div class="fields-rhs"> <div class="field bug_modal" id="field-bug_flags" > <div class="name"> Bug Flags: </div> <div class=" container"> <span id="field-value-bug_flags"><div id="bug-flags" class="flags"> <table class="layout-table"> <tbody class="edit-hide"><tr> <td class="flag-setter"><div class="vcard vcard_83595" ><a class="email " href="/user_profile?user_id=83595" > <span class="fna">Waldo</span></a> </div> </td> <td class="flag-name"> <a href="#c28" class="rel-time-title activity-ref" title="17 years ago" data-time="1182329927" >in-testsuite</a> </td> <td class="flag-value">- </td> </tr> </tbody> <tbody class="edit-show" style="display:none"><tr> <td class="flag-setter"><div class="vcard vcard_83595" ><a class="email " href="/user_profile?user_id=83595" > <span class="fna">Waldo</span></a> </div> </td> <td class="flag-name"> <label title="Whether the bug has a testcase in the test suite or not. Set it to "in-testsuite?" if the bug needs a testcase (only set this if the bug actually *needs* a testcase - not all bugs do, even layout bugs!), set it to "in-testsuite+" if the bug has an appropriate testcase, and set it to "in-testsuite-" if the bug doesn't need an explicit testcase (e.g. for code cleanup bugs). Only QA actively working on test cases in the component should use this keyword." for="flag-185323">in-testsuite</label> </td> <td class="flag-value"> <input type="hidden" id="flag-185323-dirty"> <select id="flag-185323" name="flag-185323" title="Whether the bug has a testcase in the test suite or not. Set it to "in-testsuite?" if the bug needs a testcase (only set this if the bug actually *needs* a testcase - not all bugs do, even layout bugs!), set it to "in-testsuite+" if the bug has an appropriate testcase, and set it to "in-testsuite-" if the bug doesn't need an explicit testcase (e.g. for code cleanup bugs). Only QA actively working on test cases in the component should use this keyword." disabled class="bug-flag"> <option value="-" selected>-</option> </select> </td> </tr> </tbody> <tbody class="edit-show" style="display:none"><tr> <td class="flag-setter"> </td> <td class="flag-name"> <label title="Is this bug/feature enabled in a release by a pref flag?" for="flag_type-930">behind-pref</label> </td> <td class="flag-value"> <input type="hidden" id="flag_type-930-dirty"> <select id="flag_type-930" name="flag_type-930" title="Is this bug/feature enabled in a release by a pref flag?" disabled class="bug-flag"> <option value="X"></option> </select> </td> </tr><tr> <td class="flag-setter"> </td> <td class="flag-name"> <label title="Flag tracking inclusion in the desktop Firefox product backlog." for="flag_type-846">firefox-backlog</label> </td> <td class="flag-value"> <input type="hidden" id="flag_type-846-dirty"> <select id="flag_type-846" name="flag_type-846" title="Flag tracking inclusion in the desktop Firefox product backlog." disabled class="bug-flag"> <option value="X"></option> </select> </td> </tr><tr> <td class="flag-setter"> </td> <td class="flag-name"> <label title="Flag is used to track security bug bounty nominations. Mail security(at)mozilla.org to nominate a bug." for="flag_type-803">sec-bounty</label> </td> <td class="flag-value"> <input type="hidden" id="flag_type-803-dirty"> <select id="flag_type-803" name="flag_type-803" title="Flag is used to track security bug bounty nominations. Mail security(at)mozilla.org to nominate a bug." class="bug-flag"> <option value="X"></option> <option value="?" >?</option> </select> </td> </tr><tr> <td class="flag-setter"> </td> <td class="flag-name"> <label title="Flag is used to track whether the bug report is eligible for inclusion in the Bug Bounty Hall of Fame." for="flag_type-913">sec-bounty-hof</label> </td> <td class="flag-value"> <input type="hidden" id="flag_type-913-dirty"> <select id="flag_type-913" name="flag_type-913" title="Flag is used to track whether the bug report is eligible for inclusion in the Bug Bounty Hall of Fame." disabled class="bug-flag"> <option value="X"></option> </select> </td> </tr><tr> <td class="flag-setter"> </td> <td class="flag-name"> <label title="Whether the bug has a testcase in the qa test suite or not. Set it to "in-qa-testsuite?" if the bug needs a testcase (only set this if the bug actually *needs* a testcase - not all bugs do, even layout bugs!), set it to "in-qa-testsuite+" if the bug has an appropriate testcase, and set it to "in-qa-testsuite-" if the bug doesn't need an explicit testcase (e.g. for code cleanup bugs). Only QA actively working on test cases in the component should use this keyword." for="flag_type-787">in-qa-testsuite</label> </td> <td class="flag-value"> <input type="hidden" id="flag_type-787-dirty"> <select id="flag_type-787" name="flag_type-787" title="Whether the bug has a testcase in the qa test suite or not. Set it to "in-qa-testsuite?" if the bug needs a testcase (only set this if the bug actually *needs* a testcase - not all bugs do, even layout bugs!), set it to "in-qa-testsuite+" if the bug has an appropriate testcase, and set it to "in-qa-testsuite-" if the bug doesn't need an explicit testcase (e.g. for code cleanup bugs). Only QA actively working on test cases in the component should use this keyword." disabled class="bug-flag"> <option value="X"></option> </select> </td> <td class="flag-requestee"> <div id="requestee_type-787-container" style="display:none"><input name="requestee_type-787" value="" class="requestee bz_autocomplete_user" id="requestee_type-787" > </div> <td> </tr><tr> <td class="flag-setter"> </td> <td class="flag-name"> <label title="qe-verify: + ➜ request to verify the bug manually qe-verify: – ➜ the bug will not/can not be verified manually" for="flag_type-864">qe-verify</label> </td> <td class="flag-value"> <input type="hidden" id="flag_type-864-dirty"> <select id="flag_type-864" name="flag_type-864" title="qe-verify: + ➜ request to verify the bug manually qe-verify: – ➜ the bug will not/can not be verified manually" disabled class="bug-flag"> <option value="X"></option> </select> </td> </tr> </tbody> </table> </div> </span> </div> </div> </div> </div> </section> <section class="module edit-show" style="display:none" id="module-crash-data" > <header id="module-crash-data-header" class="module-header"> <div class="module-latch" data-label-expanded="Collapse Crash Data section" data-label-collapsed="Expand Crash Data section"> <div class="module-spinner" role="button" tabindex="0" aria-controls="module-crash-data-content" aria-expanded="false" aria-labeledby="module-crash-data-title" aria-describedby="module-crash-data-subtitle"></div> <h2 class="module-title" id="module-crash-data-title">Crash Data</h2> </div> </header> <div class="module-content" id="module-crash-data-content" style="display:none" ><div class="field bug_modal edit-show" id="field-cf_crash_signature" style="display:none" > <div class="name"> Signature: </div> <div class="value"> <span id="field-value-cf_crash_signature"> <em>None</em> </span> </div> </div> </div> </section> <section class="module edit-show" style="display:none" id="module-security" > <header id="module-security-header" class="module-header"> <div class="module-latch" data-label-expanded="Collapse Security section" data-label-collapsed="Expand Security section"> <div class="module-spinner" role="button" tabindex="0" aria-controls="module-security-content" aria-expanded="false" aria-labeledby="module-security-title" aria-describedby="module-security-subtitle"></div> <h2 class="module-title" id="module-security-title">Security</h2> <h3 class="module-subtitle" id="module-security-subtitle"> (public) </h3> </div> </header> <div class="module-content" id="module-security-content" style="display:none" ><div class="groups edit-hide"> This bug is publicly visible. </div> <div class="groups edit-show" style="display:none"> </div> </div> </section> <section class="module edit-show" style="display:none" id="module-user-story" data-non-stick="1" > <header id="module-user-story-header" class="module-header"> <div class="module-latch" data-label-expanded="Collapse User Story section" data-label-collapsed="Expand User Story section"> <div class="module-spinner" role="button" tabindex="0" aria-controls="module-user-story-content" aria-expanded="false" aria-labeledby="module-user-story-title" aria-describedby="module-user-story-subtitle"></div> <h2 class="module-title" id="module-user-story-title">User Story</h2> </div> </header> <div class="module-content" id="module-user-story-content" style="display:none" > <pre id="user-story"></pre> </div> </section> <section class="module" id="module-attachments" > <header id="module-attachments-header" class="module-header"> <div class="module-latch" data-label-expanded="Collapse Attachments section" data-label-collapsed="Expand Attachments section"> <div class="module-spinner" role="button" tabindex="0" aria-controls="module-attachments-content" aria-expanded="true" aria-labeledby="module-attachments-title" aria-describedby="module-attachments-subtitle"></div> <h2 class="module-title" id="module-attachments-title">Attachments</h2> <h3 class="module-subtitle" id="module-attachments-subtitle"> (2 files, 2 obsolete files) </h3> </div> </header> <div class="module-content" id="module-attachments-content" ><table role="table" class="responsive" id="attachments"> <tr data-attachment-id="267699" class=" attach-obsolete attach-patch " style="display:none"> <td class="attach-desc-td"> <div class="attach-desc"> <a href="/attachment.cgi?id=267699" > storage patch v1 </a> </div> <div> <a href="#c14" class="attach-time activity-ref"><span class="rel-time" title="2007-06-08 04:07 PDT" data-time="1181300837">17 years ago</span></a> <span class="attach-author"><div class="vcard vcard_75420" ><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div></span> </div> <div class="attach-info">47.08 KB, patch </div> </td> <td></td> <td class="attach-actions"> <a href="/attachment.cgi?id=267699&action=edit" data-details="1">Details</a> | <a href="/attachment.cgi?id=267699&action=diff">Diff</a>  | <a href="/page.cgi?id=splinter.html&ignore=&bug=230933&attachment=267699">Splinter Review</a> </tr> <tr data-attachment-id="267942" class=" attach-obsolete attach-patch " style="display:none"> <td class="attach-desc-td"> <div class="attach-desc"> <a href="/attachment.cgi?id=267942" > storage patch v2 </a> </div> <div> <a href="#c18" class="attach-time activity-ref"><span class="rel-time" title="2007-06-11 02:05 PDT" data-time="1181552724">17 years ago</span></a> <span class="attach-author"><div class="vcard vcard_75420" ><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div></span> </div> <div class="attach-info">52.04 KB, patch </div> </td> <td></td> <td class="attach-actions"> <a href="/attachment.cgi?id=267942&action=edit" data-details="1">Details</a> | <a href="/attachment.cgi?id=267942&action=diff">Diff</a>  | <a href="/page.cgi?id=splinter.html&ignore=&bug=230933&attachment=267942">Splinter Review</a> </tr> <tr data-attachment-id="268007" class=" attach-patch " > <td class="attach-desc-td"> <div class="attach-desc"> <a href="/attachment.cgi?id=268007" > storage patch v3 </a> </div> <div> <a href="#c19" class="attach-time activity-ref"><span class="rel-time" title="2007-06-11 14:21 PDT" data-time="1181596865">17 years ago</span></a> <span class="attach-author"><div class="vcard vcard_75420" ><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div></span> </div> <div class="attach-info">52.60 KB, patch </div> </td> <td> <div class="attach-flag"><div class="vcard vcard_233280" ><span class="fn">sdwilsh</span> </div>: <a href="#c20" class="flag-name-status rel-time-title activity-ref" title="17 years ago" data-time="1181596865" > review-</a> </div></td> <td class="attach-actions"> <a href="/attachment.cgi?id=268007&action=edit" data-details="1">Details</a> | <a href="/attachment.cgi?id=268007&action=diff">Diff</a>  | <a href="/page.cgi?id=splinter.html&ignore=&bug=230933&attachment=268007">Splinter Review</a> </tr> <tr data-attachment-id="268014" class=" attach-patch " > <td class="attach-desc-td"> <div class="attach-desc"> <a href="/attachment.cgi?id=268014" > storage patch v3.1 </a> </div> <div> <a href="#c21" class="attach-time activity-ref"><span class="rel-time" title="2007-06-11 16:00 PDT" data-time="1181602809">17 years ago</span></a> <span class="attach-author"><div class="vcard vcard_75420" ><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div></span> </div> <div class="attach-info">53.68 KB, patch </div> </td> <td> <div class="attach-flag"><div class="vcard vcard_233280" ><span class="fn">sdwilsh</span> </div>: <a href="#a107481304_233280" class="flag-name-status rel-time-title activity-ref" title="17 years ago" data-time="1181602809" > review+</a> </div> <div class="attach-flag"><div class="vcard vcard_96908" ><span class="fn">mconnor</span> </div>: <a href="#c22" class="flag-name-status rel-time-title activity-ref" title="17 years ago" data-time="1181602809" > superreview+</a> </div></td> <td class="attach-actions"> <a href="/attachment.cgi?id=268014&action=edit" data-details="1">Details</a> | <a href="/attachment.cgi?id=268014&action=diff">Diff</a>  | <a href="/page.cgi?id=splinter.html&ignore=&bug=230933&attachment=268014">Splinter Review</a> </tr> </table> <footer id="attachments-footer"> <div id="attachments-actions"> <button type="button" id="attachments-obsolete-btn" class="secondary">Show Obsolete</button> </div> </footer> </div> </section> <script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH"> init_module_visibility(); </script> <meta name="firefox-versions" content="{"FIREFOX_AURORA":"","FIREFOX_DEVEDITION":"134.0b1","FIREFOX_ESR":"128.5.0esr","FIREFOX_ESR115":"115.18.0esr","FIREFOX_ESR_NEXT":"","FIREFOX_NIGHTLY":"135.0a1","LAST_MERGE_DATE":"2024-11-25","LAST_RELEASE_DATE":"2024-11-26","LAST_SOFTFREEZE_DATE":"2024-11-21","LAST_STRINGFREEZE_DATE":"2024-11-22","LATEST_FIREFOX_DEVEL_VERSION":"134.0b1","LATEST_FIREFOX_OLDER_VERSION":"3.6.28","LATEST_FIREFOX_RELEASED_DEVEL_VERSION":"134.0b1","LATEST_FIREFOX_VERSION":"133.0","NEXT_MERGE_DATE":"2025-01-06","NEXT_RELEASE_DATE":"2025-01-07","NEXT_SOFTFREEZE_DATE":"2025-01-02","NEXT_STRINGFREEZE_DATE":"2025-01-03"}"> <div id="comment-actions"> <button type="button" id="bottom-btn" class="secondary" aria-label="Go to Page Bottom">Bottom ↓</button> <div class="dropdown"> <button type="button" id="comment-tags-btn" aria-haspopup="true" aria-label="Tags" aria-expanded="false" aria-controls="comment-tags-menu" class="dropdown-button minor">Tags ▾</button> <ul id="comment-tags-menu" role="menu" tabindex="0" class="dropdown-content left" style="display:none"> <li role="presentation"> <a role="menuitem" tabindex="-1" data-comment-tag="">Reset</a> </li> </ul> </div> <div class="dropdown"> <button type="button" id="view-menu-btn" aria-haspopup="true" aria-label="Timeline" aria-expanded="false" aria-controls="view-menu" class="dropdown-button minor">Timeline ▾</button> <ul id="view-menu" role="menu" tabindex="0" class="dropdown-content left" style="display:none"> <li role="presentation"> <a id="view-reset" role="menuitem" tabindex="-1">Reset</a> </li> <li role="separator"></li> <li role="presentation"> <a id="view-collapse-all" role="menuitem" tabindex="-1">Collapse All</a> </li> <li role="presentation"> <a id="view-expand-all" role="menuitem" tabindex="-1">Expand All</a> </li> <li role="presentation"> <a id="view-comments-only" role="menuitem" tabindex="-1">Comments Only</a> </li> </ul> </div> </div> <div class="change-set" id="c0"><div class="comment" data-id="2047220" data-no="0" data-tags=""> <table class="layout-table change-head reporter" id="ch-0" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_23175" ><img src="https://secure.gravatar.com/avatar/32a640951edadeeb587abdd44a025ee1?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_23175" ><a class="email disabled" href="/user_profile?user_id=23175" > <span class="fna">Michiel van Leeuwen (email: mvl+moz@)</span></a> </div> <span class="user-role">Reporter</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-0" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-0" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c0">Description</a> </h3> • <div class="change-time"><span class="rel-time" title="2004-01-14 15:07 PST" data-time="1074121633">21 years ago</span> </div> </td> </tr> <tr id="ctag-0"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-0" data-comment-id="2047220">spin off from <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - MSIE-extension: HttpOnly cookie attribute for cross-site scripting vulnerability prevention" href="/show_bug.cgi?id=178993">bug 178993</a>. To store http-only, we need to change the format of cookies.txt. But we can't, for compatibility reasons. So, a new file needs to be created. And to do it right, it should allow more attributes to be saved, like last use time. very short summary of ideas so far: - just add httponly and last use time - add a few more unassinged fields, to be used later. (bools and int) - make the format flexible, store what mozilla knows about, and merge when saving not to lose data. - Should have versioning, cookies2.txt has a versioned filename - Maintain cookies.txt, to be used by older mozillae read <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - MSIE-extension: HttpOnly cookie attribute for cross-site scripting vulnerability prevention" href="/show_bug.cgi?id=178993">bug 178993</a> for more details.</div></div><div class="change-set" id="a14026390_75420"><div class="change" id="aa14026390_75420"> <table class="layout-table change-head assignee" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a14026390_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a14026390_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="as-a14026390_75420" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="ar-a14026390_75420"> <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#a14026390_75420">Updated</a> </h3> • <div class="change-time"><span class="rel-time" title="2004-06-25 00:20 PDT" data-time="1088148023">20 years ago</span> </div> </td> </tr> </table> </div><div class="activity"><div class="change">Blocks: <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED WONTFIX - Set-Cookie2: not accepted (RFC 2965)" href="/show_bug.cgi?id=208985">208985</a></div></div></div><div class="change-set" id="a14027416_75420"><div class="change" id="aa14027416_75420"> <table class="layout-table change-head assignee" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a14027416_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a14027416_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="as-a14027416_75420" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="ar-a14027416_75420"> <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#a14027416_75420">Updated</a> </h3> • <div class="change-time"><span class="rel-time" title="2004-06-25 00:37 PDT" data-time="1088149049">20 years ago</span> </div> </td> </tr> </table> </div><div class="activity"><div class="change">Blocks: <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - persist cookie creation time across sessions" href="/show_bug.cgi?id=248590">248590</a></div></div></div><div class="change-set" id="a14029222_75420"><div class="change" id="aa14029222_75420"> <table class="layout-table change-head assignee" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a14029222_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="as-a14029222_75420" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="ar-a14029222_75420"> <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#a14029222_75420">Updated</a> </h3> • <div class="change-time"><span class="rel-time" title="2004-06-25 01:07 PDT" data-time="1088150855">20 years ago</span> </div> </td> </tr> </table> </div><div class="activity"><div class="change">Blocks: <a class="bz_bug_link bz_status_NEW" title="NEW - [RFE] Add creation time and httponly fields to cookie manager" href="/show_bug.cgi?id=201936">201936</a></div></div></div><div class="change-set" id="c1"><div class="comment" data-id="2186298" data-no="1" data-tags=""> <table class="layout-table change-head assignee" id="ch-1" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a14029222_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-1" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-1" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c1">Comment 1</a> </h3> • <div class="change-time"><span class="rel-time" title="2004-06-25 01:26 PDT" data-time="1088151978">20 years ago</span> </div> </td> </tr> <tr id="ctag-1"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-1" data-comment-id="2186298">i've added a bunch of bugs as dependent on this, so we can keep track of what reasons we have for implementing a new fileformat (and what other things we might want to do while we're at it). a short summary: <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED WONTFIX - Set-Cookie2: not accepted (RFC 2965)" href="/show_bug.cgi?id=208985">bug 208985</a> - support Set-Cookie2. <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - persist cookie creation time across sessions" href="/show_bug.cgi?id=248590">bug 248590</a> - persist cookie creation time, to enhance behavioral consistency with older mozillae. <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - problem with MAX_NUMBER_OF_COOKIES under normal, prolonged, profile use" href="/show_bug.cgi?id=188850">bug 188850</a> - persist last-recently-used time, to allow a more performant implementation of LRU cookie deletion. <a class="bz_bug_link bz_status_NEW" title="NEW - [RFE] Add creation time and httponly fields to cookie manager" href="/show_bug.cgi?id=201936">bug 201936</a> - persist above two fields for purposes of user information (cookiemgr).</div></div><div class="change-set" id="c2"><div class="comment" data-id="2455204" data-no="2" data-tags=""> <table class="layout-table change-head " id="ch-2" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75614" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/9e4215065f3f4694782728329c954ab3?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75614" id="a14029222_75420"><a class="email disabled" href="/user_profile?user_id=75614" > <span class="fna">Christopher Nebergall</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-2" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-2" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c2">Comment 2</a> </h3> • <div class="change-time"><span class="rel-time" title="2005-03-25 07:00 PST" data-time="1111762835">20 years ago</span> </div> </td> </tr> <tr id="ctag-2"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-2" data-comment-id="2455204">I know similar problems have been solved before for other components and config files, can someone link to some fixed bugs?</div></div><div class="change-set" id="c3"><div class="comment" data-id="2543706" data-no="3" data-tags=""> <table class="layout-table change-head assignee" id="ch-3" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a14029222_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-3" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-3" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c3">Comment 3</a> </h3> • <div class="change-time"><span class="rel-time" title="2005-07-05 14:23 PDT" data-time="1120598600">19 years ago</span> </div> </td> </tr> <tr id="ctag-3"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-3" data-comment-id="2543706">vlad has said that storage is (alpha-) ready for consumers, so once 1.1 ships i think we can look at moving cookies over to it. we'll probably continue to write out the legacy cookies.txt to keep compatibility for 3rd party apps. volunteers for testing storage would be appreciated. one aspect darin mentioned is perf - is storage sufficiently powerful and performant to entrust nsCookieService's memory store to it? or should cookies retain its memory list and lazy-flushing behavior?</div></div><div class="change-set" id="c4"><div class="comment" data-id="2543716" data-no="4" data-tags=""> <table class="layout-table change-head " id="ch-4" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_24534" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/108731b114a7c04438631b4c2dc3c7d5?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_24534" id="a14029222_75420"><a class="email " href="/user_profile?user_id=24534" > <span class="fna">Vladimir Vukicevic [:vlad] [:vladv] (needinfo me, slow to respond)</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-4" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-4" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c4">Comment 4</a> </h3> • <div class="change-time"><span class="rel-time" title="2005-07-05 14:29 PDT" data-time="1120598967">19 years ago</span> </div> </td> </tr> <tr id="ctag-4"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-4" data-comment-id="2543716">(In reply to <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - move cookies to mozstorage" href="/show_bug.cgi?id=230933#c3">comment #3</a>) <span class="quote">> vlad has said that storage is (alpha-) ready for consumers, so once 1.1 ships i > think we can look at moving cookies over to it. we'll probably continue to write > out the legacy cookies.txt to keep compatibility for 3rd party apps.</span > Probably more than alpha ready even, it's gotten a pretty good beating on calendar, though there's probably still some API niceness/cleanup that could happen. <span class="quote">> volunteers for testing storage would be appreciated. one aspect darin mentioned > is perf - is storage sufficiently powerful and performant to entrust > nsCookieService's memory store to it? or should cookies retain its memory list > and lazy-flushing behavior?</span > Good question; I don't know the kinds of queries cookies would do, so I don't know how well they could be optimized using indexes. So I think the best answer I can give is "try it and see"... For bookmarks I'm going to try to work with sqlite directly, but that's far less performance intensive...</div></div><div class="change-set" id="c5"><div class="comment" data-id="2543726" data-no="5" data-tags=""> <table class="layout-table change-head assignee" id="ch-5" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a14029222_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-5" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-5" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c5">Comment 5</a> </h3> • <div class="change-time"><span class="rel-time" title="2005-07-05 14:36 PDT" data-time="1120599409">19 years ago</span> </div> </td> </tr> <tr id="ctag-5"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-5" data-comment-id="2543726">more info on storage at <a rel="nofollow" href="http://wiki.mozilla.org/Mozilla2:Unified_Storage">http://wiki.mozilla.org/Mozilla2:Unified_Storage</a></div></div><div class="change-set" id="c6"><div class="comment" data-id="2543764" data-no="6" data-tags=""> <table class="layout-table change-head " id="ch-6" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_20048" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/ace1cc2d025e30490cb83b98bd47a94a?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_20048" id="a14029222_75420"><a class="email disabled" href="/user_profile?user_id=20048" > <span class="fna">Darin Fisher</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-6" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-6" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c6">Comment 6</a> </h3> • <div class="change-time"><span class="rel-time" title="2005-07-05 15:13 PDT" data-time="1120601590">19 years ago</span> </div> </td> </tr> <tr id="ctag-6"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-6" data-comment-id="2543764">Keep in mind that cookies needs an in-memory datastore for session cookies anyways. I don't think that using sqlite for session cookies makes sense, so we probably want to preserve the existing in-memory data structure. Whether that means that we load persistent cookies from sqlite into the same in-memory data structure or provide some way to aggregate the two data structures, I'm not sure. I know that storage is being used by calendar, but it is still sort of a work in progress. The "review storage" bug (see <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Review storage module" href="/show_bug.cgi?id=273050">bug 273050</a>) hasn't seen any traction since I posted review comments last year. That said, I suspect that there are mostly just cosmetic changes in order. The interfaces probably will change some.</div></div><div class="change-set" id="c7"><div class="comment" data-id="2543795" data-no="7" data-tags=""> <table class="layout-table change-head assignee" id="ch-7" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a14029222_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-7" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-7" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c7">Comment 7</a> </h3> • <div class="change-time"><span class="rel-time" title="2005-07-05 15:41 PDT" data-time="1120603295">19 years ago</span> </div> </td> </tr> <tr id="ctag-7"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-7" data-comment-id="2543795">good point about session cookies. given that we don't want two different querying methods for persistent and session cookies, it's probably best to stick with our hash store. how efficient is sqlite for that use case - where we use it purely for storage, and discount its memory-caching/querying abilities? do we pay for that functionality even if we don't use it?</div></div><div class="change-set" id="c8"><div class="comment" data-id="2543808" data-no="8" data-tags=""> <table class="layout-table change-head " id="ch-8" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_24534" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/108731b114a7c04438631b4c2dc3c7d5?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_24534" id="a14029222_75420"><a class="email " href="/user_profile?user_id=24534" > <span class="fna">Vladimir Vukicevic [:vlad] [:vladv] (needinfo me, slow to respond)</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-8" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-8" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c8">Comment 8</a> </h3> • <div class="change-time"><span class="rel-time" title="2005-07-05 16:00 PDT" data-time="1120604407">19 years ago</span> </div> </td> </tr> <tr id="ctag-8"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-8" data-comment-id="2543808">(In reply to <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - move cookies to mozstorage" href="/show_bug.cgi?id=230933#c7">comment #7</a>) <span class="quote">> good point about session cookies. given that we don't want two different > querying methods for persistent and session cookies, it's probably best to stick > with our hash store. > > how efficient is sqlite for that use case - where we use it purely for storage, > and discount its memory-caching/querying abilities? do we pay for that > functionality even if we don't use it?</span > Not sure what you mean by pay; you're going to be doing SELECT queries to read the data out and INSERT/UPDATE statements to flush the data to the store, so they're basically the same.. the only difference is the frequency of the calls, and perhaps how much data you'd read (e.g. you'll probably SELECT * to read data and then read one statement, which will be faster than doing a select with some kind of WHERE hostname LIKE '%foo.com', and you'll probably be flushing all the INSERT/UPDATEs in one transaction, as opposed to doing them one by one). That should give you a net performance increase as far as time spent in sqlite goes.</div></div><div class="change-set" id="c9"><div class="comment" data-id="2543823" data-no="9" data-tags=""> <table class="layout-table change-head assignee" id="ch-9" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a14029222_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-9" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-9" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c9">Comment 9</a> </h3> • <div class="change-time"><span class="rel-time" title="2005-07-05 16:12 PDT" data-time="1120605120">19 years ago</span> </div> </td> </tr> <tr id="ctag-9"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-9" data-comment-id="2543823">sorry for being vague - by pay, i was thinking memory footprint. for example, the maximum size of the cookie file atm is around 4mb (although real-world ones wouldn't come near that). if sqlite maintains its own in-memory cache of the file data, we'd be doubling up on it... not sure if that's a big deal or not, though. (if it does, it'd be useful to know if there's a way of disabling the cache.)</div></div><div class="change-set" id="c10"><div class="comment" data-id="2543846" data-no="10" data-tags=""> <table class="layout-table change-head " id="ch-10" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_24534" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/108731b114a7c04438631b4c2dc3c7d5?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_24534" id="a14029222_75420"><a class="email " href="/user_profile?user_id=24534" > <span class="fna">Vladimir Vukicevic [:vlad] [:vladv] (needinfo me, slow to respond)</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-10" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-10" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c10">Comment 10</a> </h3> • <div class="change-time"><span class="rel-time" title="2005-07-05 16:32 PDT" data-time="1120606350">19 years ago</span> </div> </td> </tr> <tr id="ctag-10"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-10" data-comment-id="2543846">Ah, I see what you mean... sqlite will maintain its own memory cache per database, up to a runtime-specified size. However, I assume cookies would just live as a set of tables in an overall profile storage database; so any caching would be used overall by that database. The cookies bits would be evicted as necessary, so I don't think it would be that big of a deal. </div></div><div class="change-set" id="c11"><div class="comment" data-id="2545697" data-no="11" data-tags=""> <table class="layout-table change-head assignee" id="ch-11" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a14029222_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-11" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-11" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c11">Comment 11</a> </h3> • <div class="change-time"><span class="rel-time" title="2005-07-07 15:31 PDT" data-time="1120775474">19 years ago</span> </div> </td> </tr> <tr id="ctag-11"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-11" data-comment-id="2545697">mvl and i have talked about how we'd implement this whole storage thing for cookies. one issue is versioning - storage is nice in that it allows an older mozilla to use the cookie store, without stomping attributes it doesn't know about (e.g. that were introduced in a newer mozilla). we should take advantage of that. this also means that we have to keep the db synced (update cookies on the fly, and flush to disk periodically); we can't just nuke-and-rebuild when it comes time to flush. one potential problem here is preserving the unknown attributes might not make sense - say a cookie is set for httponly, and then is re-set in an older mozilla (which does not understand httponly) to be available to all sites. preserving the httponly attribute in this case would be wrong. but i don't think that'll be a big deal in practice. so, on startup we'll have to import the db, which means adding any attributes that don't exist - see, for example, the lastaccessed counter generation code we have at the moment. whenever a cookie is added/removed/changed, we sync that to the db immediately (as an "update" to preserve existing attributes), and lazily flush like we do now. i'm guessing that flushing to disk is handled internally to storage, and is suitably lazy (c.f. 5sec delay that cookies uses now)?</div></div><div class="change-set" id="c12"><div class="comment" data-id="2889878" data-no="12" data-tags=""> <table class="layout-table change-head " id="ch-12" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_20048" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/ace1cc2d025e30490cb83b98bd47a94a?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_20048" id="a14029222_75420"><a class="email disabled" href="/user_profile?user_id=20048" > <span class="fna">Darin Fisher</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-12" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-12" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c12">Comment 12</a> </h3> • <div class="change-time"><span class="rel-time" title="2006-06-21 15:14 PDT" data-time="1150928048">18 years ago</span> </div> </td> </tr> <tr id="ctag-12"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-12" data-comment-id="2889878">-> default owner</div><div class="activity"><div class="change">Assignee: darin → nobody</div></div></div><div class="change-set" id="c13"><div class="comment" data-id="3208838" data-no="13" data-tags=""> <table class="layout-table change-head assignee" id="ch-13" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a14029222_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a14029222_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-13" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-13" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c13">Comment 13</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-07 15:42 PDT" data-time="1181256127">17 years ago</span> </div> </td> </tr> <tr id="ctag-13"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-13" data-comment-id="3208838">taking. i have a patch in hand to move cookies over to mozstorage; still have some testing and perf work to do before it's ready.</div><div class="activity"><div class="change">Status: NEW → ASSIGNED</div></div></div><div class="change-set" id="a107134546_75420"><div class="change" id="aa107134546_75420"> <table class="layout-table change-head assignee" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107134546_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107134546_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="as-a107134546_75420" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="ar-a107134546_75420"> <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#a107134546_75420">Updated</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-07 15:42 PDT" data-time="1181256179">17 years ago</span> </div> </td> </tr> </table> </div><div class="activity"><div class="change">Assignee: nobody → dwitte</div><div class="change">Status: ASSIGNED → NEW</div><div class="change">Target Milestone: --- → mozilla1.9alpha6</div></div></div><div class="change-set" id="c14"><div class="comment" data-id="3209252" data-no="14" data-tags=""> <table class="layout-table change-head assignee" id="ch-14" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107134546_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107134546_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-14" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-14" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c14">Comment 14</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-08 04:07 PDT" data-time="1181300837">17 years ago</span> </div> </td> </tr> <tr id="ctag-14"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div id="att-267699" class="attachment patch obsolete" data-id="267699" itemscope itemtype="http://schema.org/MediaObject"> <meta itemprop="name" content="cookiestorage3-creationid.diff"> <meta itemprop="contentSize" content="48206"> <meta itemprop="encodingFormat" content="text/plain"> <div class="label"> Attached patch <meta itemprop="contentUrl" content="attachment.cgi?id=267699"> <a class="link" href="attachment.cgi?id=267699&action=diff"> <span id="att-267699-description" itemprop="description">storage patch v1</span></a> (obsolete) — <a href="attachment.cgi?id=267699&action=edit" itemprop="url" data-details="1">Details</a> — <a href="/page.cgi?id=splinter.html&ignore=&bug=230933&attachment=267699">Splinter Review</a> </div> </div> <div class="comment-text " id="ct-14" data-comment-id="3209252">first cut at storage for cookies. some notes: the design is pretty simple; i kept the in-memory hash we use atm, and just replaced the file reading/writing code. this means we have to keep two data structures synced, but the hashes really are a lot faster for lookups. (i have lots of perf data i'll post later). during pageload, there are two perf cases: getting cookies, and setting cookies. getting cookies will be unaffected, since we still use hashes. for the typical case of setting a few cookies, perf should be much faster since we update only the cookies that changed, rather than waiting 5 seconds and dumping the whole cookie file out to disk. (async writing is critical here). i took advantage of the unique "creation id" we store for each cookie, and used it as the row id for the db. this makes db lookup of a specific cookie very fast. the only flaw here is overflow, but you'd have to set 1,000,000 cookies per second for 300,000 years to overflow that 64 bit int. we currently have a "last accessed" timestamp per cookie, which is updated every time a cookie is modified or sent back to a server, and is used to evict old cookies once we hit the per-host or total limit. this is a pain to do with storage, because we'd have to update this value in the db every time a cookie is sent to a server (slow). i've changed the algo to just evict based on creation id instead, which should work fine since eviction is arbitrary and up to us anyway. this way, we don't need to update anything, and the behavior seems sane. i decided to delete the user's old cookies.txt file after import; there's not much point for it to stick around, and it contains private data that shouldn't get orphaned and rot on the disk. also, dataloss for cookies isn't that critical, since they can easily be set again. similarly, if the sqlite db has a schema version higher than it understands (the downgrading case), we just delete the table and start over. if anyone has arguments to the contrary, i'd like to hear them. ready for testing and review!</div></div><div class="change-set" id="a107179279_75420"><div class="change" id="aa107179279_75420"> <table class="layout-table change-head assignee" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107179279_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107179279_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="as-a107179279_75420" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="ar-a107179279_75420"> <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#a107179279_75420">Updated</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-08 04:08 PDT" data-time="1181300912">17 years ago</span> </div> </td> </tr> </table> </div><div class="activity"><div class="change">Summary: Allow for storing more cookie attributes by creating a new file → move cookies to mozstorage</div></div></div><div class="change-set" id="c15"><div class="comment" data-id="3209257" data-no="15" data-tags=""> <table class="layout-table change-head assignee" id="ch-15" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107179279_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107179279_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-15" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-15" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c15">Comment 15</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-08 04:11 PDT" data-time="1181301073">17 years ago</span> </div> </td> </tr> <tr id="ctag-15"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-15" data-comment-id="3209257">ugh, ignore the ridiculous changes to Makefile.in, they're not supposed to be there.</div></div><div class="change-set" id="c16"><div class="comment" data-id="3209428" data-no="16" data-tags=""> <table class="layout-table change-head " id="ch-16" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_243976" id="a107179279_75420"><img src="https://secure.gravatar.com/avatar/1f8b6a579cddf2dddac4e28a00561c8d?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_243976" id="a107179279_75420"><a class="email disabled" href="/user_profile?user_id=243976" > <span class="fna">Brian Eaton</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-16" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-16" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c16">Comment 16</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-08 06:48 PDT" data-time="1181310503">17 years ago</span> </div> </td> </tr> <tr id="ctag-16"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-16" data-comment-id="3209428"><span class="quote">> we currently have a "last accessed" timestamp per cookie, which is updated > every time a cookie is modified or sent back to a server, and is used to evict > old cookies once we hit the per-host or total limit. this is a pain to do with > storage, because we'd have to update this value in the db every time a cookie > is sent to a server (slow). i've changed the algo to just evict based on > creation id instead, which should work fine since eviction is arbitrary and up > to us anyway. this way, we don't need to update anything, and the behavior > seems sane.</span > I'm not 100% sure I understand this change, but it doesn't sound sane. I think it is going to break some web applications. I know of a few web apps that create lots of cookies, knowing in advance that some the browsers are going to get fed up and start throwing away cookies. In order to make sure that the most important cookies are not discarded, they reset only the critically important cookies with every response. For example, a login cookie might be reset with every response. Less important cookies holding information about individual short lived transactions are allowed to expire. In your patch, does resetting a cookie with the same name and value, or even the same name and a different value, update the creation ID? If so, your approach sounds reasonably safe. If the creation ID stays constant even when the server resets the cookie, you may want to look for an alternative.</div></div><div class="change-set" id="c17"><div class="comment" data-id="3209803" data-no="17" data-tags=""> <table class="layout-table change-head assignee" id="ch-17" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107179279_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107179279_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-17" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-17" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c17">Comment 17</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-08 12:50 PDT" data-time="1181332210">17 years ago</span> </div> </td> </tr> <tr id="ctag-17"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-17" data-comment-id="3209803">that's correct; any change to a cookie (including expiry time!) will result in a new nsCookie object to replace the old one, since they're immutable to consumers once created. when critical cookies are evicted and the consumer resets them, they will receive fresh creation id's.</div></div><div class="change-set" id="c18"><div class="comment" data-id="3211549" data-no="18" data-tags=""> <table class="layout-table change-head assignee" id="ch-18" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107179279_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107179279_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-18" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-18" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c18">Comment 18</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-11 02:05 PDT" data-time="1181552724">17 years ago</span> </div> </td> </tr> <tr id="ctag-18"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div id="att-267942" class="attachment patch obsolete" data-id="267942" itemscope itemtype="http://schema.org/MediaObject"> <meta itemprop="name" content="cookiestorage4.diff"> <meta itemprop="contentSize" content="53293"> <meta itemprop="encodingFormat" content="text/plain"> <div class="label"> Attached patch <meta itemprop="contentUrl" content="attachment.cgi?id=267942"> <a class="link" href="attachment.cgi?id=267942&action=diff"> <span id="att-267942-description" itemprop="description">storage patch v2</span></a> (obsolete) — <a href="attachment.cgi?id=267942&action=edit" itemprop="url" data-details="1">Details</a> — <a href="/page.cgi?id=splinter.html&ignore=&bug=230933&attachment=267942">Splinter Review</a> </div> </div> <div class="comment-text " id="ct-18" data-comment-id="3211549">a few changes. this uses creation time (in microseconds) as the unique id, with a counter to enforce uniqueness (since the system clock isn't necessarily monotonic). this way, we store the creation time of cookies for free, which would be nice to display to the user. in the db downgrade case, we check if all the expected columns are there, and just carry on if they are. this should make switching between mozilla versions transparent. if columns have been deleted, we drop the table and start over.</div><div class="activity"><div class="change"> <a href="/attachment.cgi?id=267699&action=edit" title="storage patch v1" class="" >Attachment #267699</a> - Attachment is obsolete: true</div></div></div><div class="change-set" id="c19"><div class="comment" data-id="3212182" data-no="19" data-tags=""> <table class="layout-table change-head assignee" id="ch-19" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107179279_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107179279_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-19" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-19" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c19">Comment 19</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-11 14:21 PDT" data-time="1181596865">17 years ago</span> </div> </td> </tr> <tr id="ctag-19"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div id="att-268007" class="attachment patch" data-id="268007" itemscope itemtype="http://schema.org/MediaObject"> <meta itemprop="name" content="cookiestorage5.diff"> <meta itemprop="contentSize" content="53864"> <meta itemprop="encodingFormat" content="text/plain"> <div class="label"> Attached patch <meta itemprop="contentUrl" content="attachment.cgi?id=268007"> <a class="link" href="attachment.cgi?id=268007&action=diff"> <span id="att-268007-description" itemprop="description">storage patch v3</span></a> — <a href="attachment.cgi?id=268007&action=edit" itemprop="url" data-details="1">Details</a> — <a href="/page.cgi?id=splinter.html&ignore=&bug=230933&attachment=268007">Splinter Review</a> </div> </div> <div class="comment-text " id="ct-19" data-comment-id="3212182">minor revisions. ready for review!</div><div class="activity"><div class="change"> <a href="/attachment.cgi?id=267942&action=edit" title="storage patch v2" class="" >Attachment #267942</a> - Attachment is obsolete: true</div><div class="change"> <a href="/attachment.cgi?id=268007&action=edit" title="storage patch v3" class="" >Attachment #268007</a> - Flags: superreview?(mconnor)</div><div class="change"> <a href="/attachment.cgi?id=268007&action=edit" title="storage patch v3" class="" >Attachment #268007</a> - Flags: review?(sdwilsh)</div></div></div><div class="change-set" id="c20"><div class="comment" data-id="3212278" data-no="20" data-tags=""> <table class="layout-table change-head " id="ch-20" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_233280" id="a107179279_75420"><img src="https://secure.gravatar.com/avatar/414b4ec326ff3a6dd35b81ab51a0a947?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_233280" id="a107179279_75420"><a class="email " href="/user_profile?user_id=233280" > <span class="fna">Shawn Wilsher :sdwilsh</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-20" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-20" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c20">Comment 20</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-11 15:43 PDT" data-time="1181601812">17 years ago</span> </div> </td> </tr> <tr id="ctag-20"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-20" data-comment-id="3212278">Comment on <span class=""><a href="/attachment.cgi?id=268007" name="attach_268007" title="storage patch v3">attachment 268007</a> <a href="/attachment.cgi?id=268007&action=edit" title="storage patch v3">[details]</a> <a href="/attachment.cgi?id=268007&action=diff" title="storage patch v3">[diff]</a></span> <a href='/page.cgi?id=splinter.html&ignore=&bug=230933&attachment=268007'>[review]</a> storage patch v3 General nit s/nsInt64/PR[I|Ui]nt64/g, but you can do a followup bug if you want since all these files seem to use it still. See <a rel="nofollow" href="http://groups.google.com/group/mozilla.dev.tech.nspr/msg/d48490f4c0781b92">http://groups.google.com/group/mozilla.dev.tech.nspr/msg/d48490f4c0781b92</a> <span class="quote">>+nsresult >+nsCookieService::InitDB() >+{ >+ // cache a connection to the cookie database</span > This comment should really go above where you make the call to OpenDatabase <span class="quote">>+ PRInt32 dbSchemaVersion; >+ { >+ // scope the statement, so the write lock is released when finished >+ nsCOMPtr<mozIStorageStatement> stmt; >+ rv = mDBConn->CreateStatement(NS_LITERAL_CSTRING("PRAGMA user_version"), >+ getter_AddRefs(stmt)); >+ NS_ENSURE_SUCCESS(rv, rv); >+ >+ PRBool hasResult; >+ rv = stmt->ExecuteStep(&hasResult); >+ NS_ENSURE_SUCCESS(rv, rv); >+ NS_ENSURE_TRUE(hasResult, NS_ERROR_FAILURE);</span > No result here means that user_version is not set. If it isn't, we can still figure out of the DB is useable and act accordingly. As the code is now, the user would have to delete the database themselves for this to ever work again. <span class="quote">>+ // downgrading. >+ // if columns have been added to the table, we can still use the ones we >+ // understand safely. if columns have been deleted or altered, just >+ // blow away the table and start from scratch! >+ </span > Please explicitly state that if someone modifies how a column is used, they need to rename it so downgrading works properly. r=me with these fixed</div><div class="activity"><div class="change"> <a href="/attachment.cgi?id=268007&action=edit" title="storage patch v3" class="" >Attachment #268007</a> - Flags: review?(sdwilsh) → review-</div></div></div><div class="change-set" id="a107481064_75420"><div class="change" id="aa107481064_75420"> <table class="layout-table change-head assignee" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107481064_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107481064_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="as-a107481064_75420" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="ar-a107481064_75420"> <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#a107481064_75420">Updated</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-11 15:58 PDT" data-time="1181602697">17 years ago</span> </div> </td> </tr> </table> </div><div class="activity"><div class="change"> <a href="/attachment.cgi?id=268007&action=edit" title="storage patch v3" class="" >Attachment #268007</a> - Flags: <span class="activity-deleted">superreview?(mconnor)</span></div></div></div><div class="change-set" id="c21"><div class="comment" data-id="3212297" data-no="21" data-tags=""> <table class="layout-table change-head assignee" id="ch-21" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107481064_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107481064_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-21" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-21" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c21">Comment 21</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-11 16:00 PDT" data-time="1181602809">17 years ago</span> </div> </td> </tr> <tr id="ctag-21"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div id="att-268014" class="attachment patch" data-id="268014" itemscope itemtype="http://schema.org/MediaObject"> <meta itemprop="name" content="cookiestorage6.diff"> <meta itemprop="contentSize" content="54964"> <meta itemprop="encodingFormat" content="text/plain"> <div class="label"> Attached patch <meta itemprop="contentUrl" content="attachment.cgi?id=268014"> <a class="link" href="attachment.cgi?id=268014&action=diff"> <span id="att-268014-description" itemprop="description">storage patch v3.1</span></a> — <a href="attachment.cgi?id=268014&action=edit" itemprop="url" data-details="1">Details</a> — <a href="/page.cgi?id=splinter.html&ignore=&bug=230933&attachment=268014">Splinter Review</a> </div> </div> <div class="comment-text " id="ct-21" data-comment-id="3212297">nits fixed. thanks for the quick review!</div><div class="activity"><div class="change"> <a href="/attachment.cgi?id=268014&action=edit" title="storage patch v3.1" class="" >Attachment #268014</a> - Flags: superreview?(mconnor)</div><div class="change"> <a href="/attachment.cgi?id=268014&action=edit" title="storage patch v3.1" class="" >Attachment #268014</a> - Flags: review?(sdwilsh)</div></div></div><div class="change-set" id="a107481304_233280"><div class="change" id="aa107481304_233280"> <table class="layout-table change-head " role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_233280" id="a107481304_233280"><img src="https://secure.gravatar.com/avatar/414b4ec326ff3a6dd35b81ab51a0a947?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_233280" id="a107481304_233280"><a class="email " href="/user_profile?user_id=233280" > <span class="fna">Shawn Wilsher :sdwilsh</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="as-a107481304_233280" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="ar-a107481304_233280"> <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#a107481304_233280">Updated</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-11 16:02 PDT" data-time="1181602937">17 years ago</span> </div> </td> </tr> </table> </div><div class="activity"><div class="change"> <a href="/attachment.cgi?id=268014&action=edit" title="storage patch v3.1" class="" >Attachment #268014</a> - Flags: review?(sdwilsh) → review+</div></div></div><div class="change-set" id="a107763383_75420"><div class="change" id="aa107763383_75420"> <table class="layout-table change-head assignee" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107763383_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107763383_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="as-a107763383_75420" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="ar-a107763383_75420"> <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#a107763383_75420">Updated</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-14 22:23 PDT" data-time="1181885016">17 years ago</span> </div> </td> </tr> </table> </div><div class="activity"><div class="change">Blocks: <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED DUPLICATE - Cookies should be overwritten last-recent-first" href="/show_bug.cgi?id=348008">348008</a></div></div></div><div class="change-set" id="a107764344_75420"><div class="change" id="aa107764344_75420"> <table class="layout-table change-head assignee" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107764344_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107764344_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="as-a107764344_75420" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="ar-a107764344_75420"> <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#a107764344_75420">Updated</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-14 22:39 PDT" data-time="1181885977">17 years ago</span> </div> </td> </tr> </table> </div><div class="activity"><div class="change">Blocks: <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED DUPLICATE - cookie manager: add date created, date last modified, count # modifications" href="/show_bug.cgi?id=236133">236133</a></div></div></div><div class="change-set" id="c22"><div class="comment" data-id="3218258" data-no="22" data-tags=""> <table class="layout-table change-head " id="ch-22" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_96908" id="a107764344_75420"><img src="https://secure.gravatar.com/avatar/634e23acaee53ab34532f04ec03b14a8?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_96908" id="a107764344_75420"><a class="email disabled" href="/user_profile?user_id=96908" > <span class="fna">Mike Connor [:mconnor]</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-22" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-22" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c22">Comment 22</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-16 16:38 PDT" data-time="1182037112">17 years ago</span> </div> </td> </tr> <tr id="ctag-22"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-22" data-comment-id="3218258">Comment on <span class=""><a href="/attachment.cgi?id=268014" name="attach_268014" title="storage patch v3.1">attachment 268014</a> <a href="/attachment.cgi?id=268014&action=edit" title="storage patch v3.1">[details]</a> <a href="/attachment.cgi?id=268014&action=diff" title="storage patch v3.1">[diff]</a></span> <a href='/page.cgi?id=splinter.html&ignore=&bug=230933&attachment=268014'>[review]</a> storage patch v3.1 <span class="quote">>+ if (NS_FAILED(rv)) { >+ // our columns aren't there - drop the table! >+ rv = mDBConn->ExecuteSimpleSQL(NS_LITERAL_CSTRING("DROP TABLE moz_cookies")); >+ NS_ENSURE_SUCCESS(rv, rv);</span > do we want to copy the sqlite file so that someone who blows up their file on a downgrade this way can recover? <span class="quote">>+ // check whether to import or just read in the db >+ if (!tableExists) >+ rv = ImportCookies(); >+ else >+ rv = Read(); >+ >+ return rv; >+}</span > if (!tableExists) return ImportCookies(); return Read(); Generally seems more readable. <span class="quote">>+ // if it's a non-session cookie and hasn't just been read from the db, write it out. >+ if (aWriteToDB && !aCookie->IsSession() && mStmtInsert) { >+ // use our cached sqlite "insert" statement >+ mozStorageStatementScoper scoper(mStmtInsert); >+ >+ nsresult rv = bindCookieParameters(mStmtInsert, aCookie); >+ if (NS_FAILED(rv)) { >+ NS_WARNING("binding parameters failed!");</span > style whining: return PR_TRUE here, and ditch the else? too-much-nested-if ;) <span class="quote">>+ } else { >+ PRBool hasResult; >+ rv = mStmtInsert->ExecuteStep(&hasResult); >+ if (NS_FAILED(rv)) >+ NS_WARNING("db insert failed!"); >+ } >+ } > > return PR_TRUE;</span > overall, sr=me, looks like sdwilsh did the hard stuff here.</div><div class="activity"><div class="change"> <a href="/attachment.cgi?id=268014&action=edit" title="storage patch v3.1" class="" >Attachment #268014</a> - Flags: superreview?(mconnor) → superreview+</div></div></div><div class="change-set" id="c23"><div class="comment" data-id="3219019" data-no="23" data-tags=""> <table class="layout-table change-head assignee" id="ch-23" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107764344_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107764344_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-23" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-23" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c23">Comment 23</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-17 15:25 PDT" data-time="1182119159">17 years ago</span> </div> </td> </tr> <tr id="ctag-23"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-23" data-comment-id="3219019">checked in for alpha, with nits fixed. i didn't do the file backup yet; probably want fresh reviews for that. might add that in at a later point. fixed! notes to anyone considering modifying the cookie sqlite db schema in future: see comments in nsCookieService::InitDB() re upgrading and downgrading!</div><div class="activity"><div class="change">Status: NEW → RESOLVED</div><div class="change">Closed: <span class="rel-time" title="2007-06-17 15:25 PDT" data-time="1182119159">17 years ago</span></div><div class="change">Resolution: --- → FIXED</div></div></div><div class="change-set" id="c24"><div class="comment" data-id="3219201" data-no="24" data-tags=""> <table class="layout-table change-head " id="ch-24" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_103593" id="a107764344_75420"><img src="https://secure.gravatar.com/avatar/08de945228403cb0598d5906e2407a7d?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_103593" id="a107764344_75420"><a class="email " href="/user_profile?user_id=103593" > <span class="fna">:Gavin Sharp [email: gavin@gavinsharp.com]</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-24" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-24" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c24">Comment 24</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-17 20:16 PDT" data-time="1182136586">17 years ago</span> </div> </td> </tr> <tr id="ctag-24"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-24" data-comment-id="3219201">(In reply to <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - move cookies to mozstorage" href="/show_bug.cgi?id=230933#c23">comment #23</a>) <span class="quote">> i didn't do the file backup yet; probably want fresh reviews for that. might add > that in at a later point.</span > Probably would be a good idea to file a bug for this, lest it be forgotten.</div></div><div class="change-set" id="c25"><div class="comment" data-id="3221641" data-no="25" data-tags=""> <table class="layout-table change-head " id="ch-25" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_169237" id="a107764344_75420"><img src="https://secure.gravatar.com/avatar/d63f8ffbb740e98d0e58077841164402?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_169237" id="a107764344_75420"><a class="email disabled" href="/user_profile?user_id=169237" > <span class="fna">Chris Lawson (gone)</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-25" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-25" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c25">Comment 25</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-19 13:34 PDT" data-time="1182285294">17 years ago</span> </div> </td> </tr> <tr id="ctag-25"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-25" data-comment-id="3221641">This totally broke cookies in Camino, as far as I can tell.</div></div><div class="change-set" id="c26"><div class="comment" data-id="3221649" data-no="26" data-tags=""> <table class="layout-table change-head " id="ch-26" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_7044" id="a107764344_75420"><img src="https://secure.gravatar.com/avatar/3301a62f3707d6bcef9542d316fb587f?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_7044" id="a107764344_75420"><a class="email " href="/user_profile?user_id=7044" > <span class="fna">Benjamin Smedberg</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-26" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-26" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c26">Comment 26</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-19 13:39 PDT" data-time="1182285573">17 years ago</span> </div> </td> </tr> <tr id="ctag-26"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-26" data-comment-id="3221649">Please file a separate bug for Camino, as camino-specific bugs are not a blocker.</div></div><div class="change-set" id="c27"><div class="comment" data-id="3221667" data-no="27" data-tags=""> <table class="layout-table change-head " id="ch-27" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_169237" id="a107764344_75420"><img src="https://secure.gravatar.com/avatar/d63f8ffbb740e98d0e58077841164402?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_169237" id="a107764344_75420"><a class="email disabled" href="/user_profile?user_id=169237" > <span class="fna">Chris Lawson (gone)</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-27" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-27" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c27">Comment 27</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-19 13:50 PDT" data-time="1182286235">17 years ago</span> </div> </td> </tr> <tr id="ctag-27"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-27" data-comment-id="3221667">(In reply to <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - move cookies to mozstorage" href="/show_bug.cgi?id=230933#c26">comment #26</a>) <span class="quote">> Please file a separate bug for Camino, as camino-specific bugs are not a > blocker.</span > Yeah, I was on my way to do this too. <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Cookie support totally broken (no writing to cookies.txt), need to build mozstorage" href="/show_bug.cgi?id=385074">Bug 385074</a> has been filed. </div></div><div class="change-set" id="c28"><div class="comment" data-id="3222274" data-no="28" data-tags=""> <table class="layout-table change-head " id="ch-28" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_83595" id="a107764344_75420"><img src="https://secure.gravatar.com/avatar/d26a0ca7ae1134e0e1dbdddf82e28929?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_83595" id="a107764344_75420"><a class="email " href="/user_profile?user_id=83595" > <span class="fna">Jeff Walden [:Waldo]</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-28" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-28" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c28">Comment 28</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-20 01:58 PDT" data-time="1182329927">17 years ago</span> </div> </td> </tr> <tr id="ctag-28"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-28" data-comment-id="3222274">Not user-visible, regressions can be tested separately, so in-testsuite-.</div><div class="activity"><div class="change">Flags: in-testsuite-</div></div></div><div class="change-set" id="c29"><div class="comment" data-id="3229658" data-no="29" data-tags=""> <table class="layout-table change-head assignee" id="ch-29" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107764344_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107764344_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-29" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-29" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c29">Comment 29</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-26 00:03 PDT" data-time="1182841415">17 years ago</span> </div> </td> </tr> <tr id="ctag-29"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-29" data-comment-id="3229658">as promised in <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - move cookies to mozstorage" href="/show_bug.cgi?id=230933#c14">comment 14</a>, some comments on perf: transactions make a big difference. with synchronous writing on (sqlite default), adding 1000 cookies one-by-one (via INSERT), in a loop, took (all times in microseconds): no transaction: 1100000 (yes, 1.1 seconds!) no transaction, but synchronous=OFF: 106000 transactions (synchronous makes no difference): 6900 which justifies why we use async writing, to optimize the relatively common case of a pageload setting 5-10 cookies over a few seconds. note that, while we use transactions inside the SetCookie functions themselves, it's not possible to set all cookies for a pageload under one transaction - so, we have to optimize that case as well, which async helps with a lot. also, these tests were for the case of no indexing on the table, default caching and paging. starting from the last number (6900) and playing around with what we index the table on: transactions, with index on host string: 13000 transactions, with index on 64 bit int (expiry): 12500 transactions, with index on unique rowid: 5600 i.e. the cost of indexing on either a string or non-unique integer is significant, but indexing on the row id itself is very cheap (c.f. creation time). very similar numbers result for removal of 1000 entries: removing, with match on name, path and host strings: 290000 removing, as above, but indexing on host: 15700 removing, index on host, and only matching host: 12500 removing, index on 64 bit int (expiry): 15700 removing, index on unique rowid: 5600 thus when removing a specific entry, any kind of indexing gives a 20x speedup. whether the index is by string or int doesn't matter much, but indexing by rowid is far cheaper. looking at caching settings (PRAGMA cache_size), i didn't see much difference on insertion time for cache sizes between 2 and 2000 pages. paging (PRAGMA page_size) did have an effect on insertion time; large pages (>2k) doubled the insertion time. pages 512 - 1024 seemed to work best (tested with sync on), which probably corresponds to the OS page size. based on these findings, i left page_size and cache_size at the sqlite defaults. looking at mem usage vs cache_size, the largest cookie file is around 4MB (1000 cookies * 4k each). that's significant, so we want to limit the cache somewhat. default cache size is 2000 pages which added around 400k to mem usage over the no cache value. increasing cache to 10000 pages made mem usage jump 4MB (the whole db). the default value seemed reasonable (the in-mem cookie list is going to chew up 4MB anyway, so a 400kb database cache is small potatoes). finally, comparing lookup times: 1000 lookups (matching on host, name, and path) take 356us using the in-memory hashtable (fast!). SELECTing those same entries (again, matching by host, name, and path; also indexing on host, to be fair) takes 13000us. this explains why i stuck with our hash structure; the db is much slower for query operations.</div></div><div class="change-set" id="c30"><div class="comment" data-id="3229683" data-no="30" data-tags=""> <table class="layout-table change-head assignee" id="ch-30" role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_75420" id="a107764344_75420"><img src="https://secure.gravatar.com/avatar/a1c33ee327ed209ba819902f4abe5bb4?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_75420" id="a107764344_75420"><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> <span class="user-role">Assignee</span> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="cs-30" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="cr-30" > <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#c30">Comment 30</a> </h3> • <div class="change-time"><span class="rel-time" title="2007-06-26 00:42 PDT" data-time="1182843779">17 years ago</span> </div> </td> </tr> <tr id="ctag-30"> <td colspan="2" class="comment-tags"> </td> </tr> </table> </div><div class="comment-text " id="ct-30" data-comment-id="3229683">(all these tests were done on a firefox opt build, otherwise default build options, on a core 2 duo 6400 @ 2.13GHz).</div></div><div class="change-set" id="a140792044_55600"><div class="change" id="aa140792044_55600"> <table class="layout-table change-head " role="presentation"> <tr> <td rowspan="2" class="change-gravatar"><div class="vcard vcard_55600" id="a140792044_55600"><img src="https://secure.gravatar.com/avatar/1ecb17d06c0dc059332f0f5fb330984e?d=mm&size=64" class="gravatar" width="32" height="32"> </div> </td> <td class="change-author"><div class="vcard vcard_55600" id="a140792044_55600"><a class="email " href="/user_profile?user_id=55600" > <span class="fna">Martijn Wargers (dead)</span></a> </div> </td> <td rowspan="2" class="comment-actions"><div role="group"> <button type="button" class="change-spinner ghost iconic" id="as-a140792044_55600" aria-label="Collapse" aria-expanded="true" data-strings='{ "collapse_label": "Collapse", "expand_label": "Expanded" }'> <span class="icon" aria-hidden="true"></span> </button> </div></td> </tr> <tr id="ar-a140792044_55600"> <td> <h3 class="change-name"> <a href="/show_bug.cgi?id=230933#a140792044_55600">Updated</a> </h3> • <div class="change-time"><span class="rel-time" title="2008-07-01 05:01 PDT" data-time="1214913677">16 years ago</span> </div> </td> </tr> </table> </div><div class="activity"><div class="change">Depends on: <a class="bz_bug_link bz_status_RESOLVED bz_closed" title="RESOLVED INVALID - "profile-do-change" event does not cause cookie table reload" href="/show_bug.cgi?id=439384">439384</a></div></div></div><div id="new-comment-notice"> You need to <a href="/show_bug.cgi?id=230933&GoAheadAndLogIn=1">log in</a> before you can comment on or make changes to this bug. </div> <div id="bottom-actions"> <div id="bottom-right-actions"> <button type="button" id="top-btn" class="secondary" aria-label="Go to Page Top">Top ↑</button> </div> </div> <dialog id="att-overlay" class="readonly" aria-labelledby="att-overlay-title" data-attachment-count="4"> <form method="dialog"> <div class="header"> <h2 id="att-overlay-title" class="title">Attachment</h2> <div class="spacer"></div> <button type="button" class="secondary iconic" hidden disabled data-action="prev" title="Previous Attachment" aria-keyshortcuts="ArrowLeft"> <span class="icon" aria-hidden="true"></span> </button> <button type="button" class="secondary iconic" hidden disabled data-action="next" title="Next Attachment" aria-keyshortcuts="ArrowRight"> <span class="icon" aria-hidden="true"></span> </button> <button type="button" class="secondary" data-action="toggle-details">Hide Details</button> <button type="button" class="secondary iconic" data-action="close" aria-label="Close"> <span class="icon" aria-hidden="true"></span> </button> </div> <div class="body"> <div class="sub-column"> <div class="detail-pane"> <section class="cols"> <h3>General</h3> <div class="creator"> Creator: <div class="vcard vcard_75420" ><a class="email disabled" href="/user_profile?user_id=75420" > <span class="fna">dwitte@gmail.com</span></a> </div> </div> <div>Created: <span class="created-date rel-time"></span></div> <div>Updated: <span class="updated-date rel-time"></span></div> <div>Size: <span class="file-size"></span></div> </section> <section class="cols"> <h3> <label for="att-overlay-description">Description</label> </h3> <div> <input type="text" name="description" disabled id="att-overlay-description" class="flex"> </div> </section> <section class="cols"> <h3> <label for="att-overlay-file-name">File Name</label> </h3> <div> <input type="text" name="filename" disabled id="att-overlay-file-name" class="flex"> </div> </section> <section class="cols"> <h3> <label for="att-overlay-content-type">Content Type</label> </h3> <div> <input type="text" name="contenttypeentry" disabled id="att-overlay-content-type" class="flex"> </div> </section> </div> </div> <div class="main-column"> <div class="preview-pane"> <div class="preview "> </div> </div> </div> </div> <div class="footer"> <button type="button" class="secondary" data-action="raw">Raw</button> <button type="button" class="secondary" disabled data-action="diff">Diff</button> <button type="button" class="secondary" disabled data-action="review" data-base="https://bugzilla.mozilla.org/page.cgi?id=splinter.html&ignore=">Splinter Review</button> <div class="spacer"></div> </div> </form> </dialog> <link rel="stylesheet" href="/static/v20241126.1/extensions/FlagTypeComment/web/styles/ftc.css"> <script nonce="rF7wjwo36VmEoRFgVyHYnRcPmXCaB3kJGnuhihU3VNmoNGrH" src="/static/v20241126.1/extensions/FlagTypeComment/web/js/ftc.js"></script></div> </main> </div> </body> </html>